2017-02-08 14 views
0

ファイル内に以下のタイプのコンテンツがあります。私はそれがパターンの後に表示された場合にのみREFERENCESawk/sedを使用して一致するパターンの後に文字を置き換えます。

がライン

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 
; 

私はいくつかのことを試みたが運はなかった。

+0

を、あなたを投稿することができます試み? – Inian

+1

これまでに試したことがありますか? – CodeChanger

答えて

1

sed:

まで、次の )の文字を除く非 )文字が続き REFERENCEを含むの
sed 's/\(REFERENCE[^)]*\))/\1/' file 

文字列は後方参照を使用してキャプチャして出力されます。

は場所にファイルを編集する-iフラグを追加します。

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

編集:

何の開口部のブラケットが存在しない場合にのみ、削除するには:

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

おかげでたくさんのSLePortがありました。これは魅力的なものでした – DBPlayer

+0

しかしすぐに別の問題が発生しました。ファイルの行の一部が次のように変更されています.mytable1 AD_ CONSTRAINT myconst1 FOREIGN KEY(fkeyid) REFERENCES mytable2このような場合には、ブラケットの両方を保持したい、つまり上記の2行のブラケットのためのブラケット)を交換しないでください。REFERENCES句 – DBPlayer

+0

の後ろにかっこがない場合にのみ交換してください。 – SLePort

関連する問題