我有一些脚本,代码如下:
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
更新的代码更接近解决方案,但仍然缺少一部分
我在 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')