Sedコマンドを何度も置き換えるのに役立ちます。

Sedコマンドを何度も置き換えるのに役立ちます。

sedコマンドを含むファイルが必要です。このようなファイルがあります。

amb/eng/hello.amb

次の出力が必要です

amx/eng/hello.amx
amx-grk/eng/hello.amx

誰でも私を助けることができますか?

答え1

あなたが使用できるsed -e 's/amb/amx/gp' -e 's/amx/&-grk/' yourfile

前任者。

$ echo 'amb/eng/hello.amb' | sed -e 's/amb/amx/gp' -e 's/amx/&-grk/'
amx/eng/hello.amx
amx-grk/eng/hello.amx

答え2

これは次のようになります。スチールドライバーの回答しかし、一致は少し厳しいです。

$ sed '\,^amb/\(.*\)\.amb$, { s,,amx/\1.amx,p; s/amx/&-grk/; }' file
amx/eng/hello.amx
amx-grk/eng/hello.amx

amb/上記のコマンドは、で始まり終わる行を探していると仮定します.amb。これらの行が見つかると、実行された初期置換コマンドは、2つの部分文字列をそれぞれにamx/変更し、次に変更さ.amxれた行を出力します。 2番目の置換は、amx最初の文字列(行の先頭に現れることがわかっている)をに変更しますamx-grk。第2の修正結果は、ループ端の基本出力に出力される。

スクリプトの先頭にregexを実行する区切り文字としてコンマを使用しsedsコマンドにスラッシュを含めたいので、中かっこ内の式グループ内のコマンドを使用しています。


この正確なコマンドを書くもう一つの方法は、b次のように("branch")を使用することです。いいえ初期正規表現と一致しない行を修正します。これにより、コマンドを3つの別々の式に書き込むことができます。

$ sed -e '\,^amb/\(.*\)\.amb$, !b' -e 's,,amx/\1.amx,p' -e 's/amx/&-grk/' file
amx/eng/hello.amx
amx-grk/eng/hello.amx

答え3

次のことを試すことができます。

sed 's/amb/amx/g' |  awk -F'/' '{print $1"/"$2"/"$3 " " $1"-grk/"$2"/"$3}'

例えば

$ echo  'amb/eng/hello.amb' | sed 's/amb/amx/g' |  awk -F'/' '{print $1"/"$2"/"$3 " " $1"-grk/"$2"/"$3}'
amx/eng/hello.amx amx-grk/eng/hello.amx

関連情報