sed用正则表达式替换位置

时间:2015-04-13 06:49:40

标签: shell sed

我有像

这样的字符串
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 \6)\3/I g'

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

2 个答案:

答案 0 :(得分:1)

你可以这样做,

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

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

答案 1 :(得分:0)

你可以使用awk

这样做
awk '/dateAdd/ {split($2,a,",");print $1,$3,a[2],tolower($4),$5}' file
SELECT MAX(col_name)) -90 from table_123_name

如果您需要其他条件来搜索/dateAdd/,那么只需将其更改为您需要的内容。