以下に一致するすべての項目を置き換える必要があるファイルがあります。
," "\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