sed 正規表現の検索と置換

sed 正規表現の検索と置換

以下に一致するすべての項目を置き換える必要があるファイルがあります。

,"   "\n  to  ,"ZYY"\n
,"ZZY"\n  to  ,"ZYY"\n
,"GMZ"\n  to  ,"FPZ"\n

このコマンドを使用しようとしてもsed 's/," "/,"ZYY"/g' Packs.txt機能しません。

答え1

これはトリックを行うようです

$ sed -E 's/,"(   |ZZY)"$/,"ZYY"/;s/,"GMZ"$/,"FPZ"/' inputfile

ここで最も重要なのは、$検索する代わりにアンカーを使用して行末を表示することです\n

答え2

実行する変換のコレクションがある場合は、それをファイルに入れることができます。その後、「-f _sed_file_」を使用してすべてのエントリを処理できます。たとえば、入力ファイルが次のtest.inファイルのような場合:

This,"   ",is,a,test
This,too,"ZZY",is,a,test
And,so,"GMZ",is,this

次のsedファイルがあります。

s/,"   "/,"ZYY"/g
s/,"ZZY"/,"ZYY"/g
s/,"GMZ"/,"FPZ"/g

次のコマンドを実行できます。

sed -f test.sed test.in

次の出力を取得します。

This,"ZYY",is,a,test
This,too,"ZYY",is,a,test
And,so,"FPZ",is,this

答え3

これにより、3つの文字列がすべて必要に応じて変更され、変更のみが標準出力に送信されます。

 sed -e 's|,"   "\\n|,"ZYY"\\n|g' -e 's|,"ZZY"\\n|,"ZYY"\\n|g' -e 's|,"GMZ"\\n|,"FPZ"\\n|g' Packs.txt

二重引用符の間の文字だけでなく、文字列全体を使用しました。なぜなら、これらの特定の文字列がファイルの他の場所に現れるかどうかを指定しなかったからです。

結果がうまくいけば、次のコマンドを使用してファイル自体を変更できます。

sed -i -e 's|,"   "\\n|,"ZYY"\\n|g' -e 's|,"ZZY"\\n|,"ZYY"\\n|g' -e 's|,"GMZ"\\n|,"FPZ"\\n|g' Packs.txt

関連情報