如何使用 sed 定位模式,并从中创建两个捕获组

问题描述 投票:0回答:1

我有一些脚本,代码如下:

AND EQUAL_NULL(b.DATE_FIELD, a.DATE_FIELD)

我想动态替换,因为

b.DATE_FIELD
a.DATE_FIELD
可以有不同的字段。

我相信我需要捕获括号内的每个字段作为它们自己的捕获组,并将它们写入新的等效项。基本上,我认为

(
,
之间的内容将是第 1 组,
,
)
之间的内容将是第 2 组。然后我可以将它们写入如下所示的新替换模式。

期望的最终结果:

AND COALESCE(b.DATE_FIELD, 'NA') = COALESCE(a.DATE_FIELD, 'NA')

我的尝试:

 echo "AND EQUAL_NULL(b.DATE_LOCAL, a.DATE_LOCAL)" | sed -n "s/AND EQUAL_NULL(\([^,]*\)\([^)]*\).*/COALESCE(\1\, \'NA\'\) = COALESCE(\2\, \'NA\'\)/p"

返回我想要的大部分内容:

COALESCE(b.DATE_LOCAL, 'NA') = COALESCE(, a.DATE_LOCAL, 'NA')

我不太确定如何将

b.DATE_FIELD
作为群组
\1
a.DATE_FIELD
作为群组
\2

更新的代码更接近解决方案,但仍然缺少一部分

regex text sed
1个回答
0
投票

我在 MacOS zsh 上测试了这个:

echo "AND EQUAL_NULL(b.DATE_LOCAL, a.DATE_LOCAL)" |
sed -n "s/AND EQUAL_NULL(\\([^,]*\\), \\([^)]*\\))/COALESCE(\1, 'NA') = COALESCE(\2, 'NA')/p" 

输出:

COALESCE(b.DATE_LOCAL, 'NA') = COALESCE(a.DATE_LOCAL, 'NA')
© www.soinside.com 2019 - 2024. All rights reserved.