使用正则表达式的 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
将第三个捕获组中存在的所有字符转换为小写。
我有像
这样的字符串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
将第三个捕获组中存在的所有字符转换为小写。