我有一些带有类似代码的脚本:
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
as Group\1
和a.DATE_FIELD
AS Group\2
更新的代码更接近解决方案,但仍缺少一部分
在 Linux 上使用 GNU Sed 4.9 和 zsh 进行了测试