使用awk / sed替换匹配模式后找到的字符

时间:2017-02-08 06:52:41

标签: awk sed

我在文件中有以下类型的内容。我想仅在模式)

之后出现时才替换右括号符号REFERENCES

请注意,符号)不必位于行的末尾

cat file1    
ALTER TABLE mytable1
       ADD  ( CONSTRAINT myconst1 FOREIGN KEY (fkeyid)
                             REFERENCES mytable2 ) ;
ALTER TABLE mytable5
       ADD  ( CONSTRAINT myconst1 FOREIGN KEY (fkeyid)
                             REFERENCES mytable6 )
 ;

期望的输出

ALTER TABLE mytable1
       ADD  ( CONSTRAINT myconst1 FOREIGN KEY (fkeyid)
                             REFERENCES mytable2  ;
ALTER TABLE mytable5
       ADD  ( CONSTRAINT myconst1 FOREIGN KEY (fkeyid)
                             REFERENCES mytable6 
 ;

我尝试了一些但没有运气

1 个答案:

答案 0 :(得分:1)

使用sed:

sed 's/\(REFERENCE[^)]*\))/\1/' file

使用反向引用捕获并输出包含REFERENCE后跟非)字符的字符串,直到和排除下一个)字符。

添加-i标志以编辑文件:

sed -i 's/\(REFERENCE[^)]*\))/\1/' file

修改

仅在没有左括号时删除:

sed 's/\(REFERENCE[^(]*[^()]*\))/\1/' file