使用正则表达式的 sed 位置替换

sed positional replacement with regular expression

我有像

这样的字符串
SELECT dateAdd(dd,-90, MAX(col_name)) FROM table_123_name

我希望输出为

SELECT MAX(col_name) -90 from table_123_name

我试过

cat test.txt|sed "s/dateadd(dd,//I g"|sed 's/\(\[select\]\)\([ \s\t]*\)\([0-9-]*\)\(\[,\]\)\([ \s\t]*\)\([A-Za-z0-9(_]*[)]*\)/SELECT )/I g'

但正则表达式替换不起作用

你可以这样做 awk:

awk '/dateAdd/ {split(,a,",");print ,,a[2],tolower(),}' file
SELECT MAX(col_name)) -90 from table_123_name

如果您需要 /dateAdd/ 以外的其他搜索条件,则只需将其更改为您需要的即可。

你可以这样做,

$ echo 'SELECT dateAdd(dd,-90, MAX(col_name)) FROM table_123_name' | sed 's/dateadd(dd,\([^,]*\), *\([^) ]*)\)) *\(.*\)/  \L/gi'
SELECT MAX(col_name) -90 from table_123_name
最后的

i 修饰符有助于进行不区分大小写的匹配,并且 \L 将第三个捕获组中存在的所有字符转换为小写。