複数の置換ルールがありますが、最初の適用可能なルールのみを使用します。 sed
は、デフォルトで、残りのルールを使用して出力の処理を続行します。最初の置換後、どのようにブレークしますか? sed
だけを使用することは可能ですか?マニュアルにオプションが見つかりませんでした。
実際の出力
$ sed "s/something/else/; s/one/two/; s/two/three/;" <<<"one"
three
必要な操作
$ sed "s/something/else/; s/one/two/; s/two/three/;" <<<"one"
two
置換が行われた場合は、各t
コマンドの後にs
コマンドを使用して、スクリプトの最後に分岐します。
sed -e 's/something/else/;t' \
-e 's/one/two/;t' \
-e 's/two/three/;t' <<<"one"
ここでは、最後の置換後のt
コマンドは必要ありませんが、このコードを自動的に生成する場合は、最後でもs
を各サフィックスに付けても問題ありません。
他のコマンドでブランチ「t」を使用してsedを実行するのが最適です。
これは単なる提案です。置き換えた場合に内部で複数のことを実行したい場合は、awkを使用できます。
awk ' { if (gsub("something","else",$0) || gsub("one","two",$0) || gsub("two","three",$0) ){ print $0;exit}; }' <<<"one"
これらは順番に評価されるので、円がなく簡単にできる場合は、
s/two/three/; s/one/two/; s/something/else/
円がある場合、またはリストが他のデータから生成されている場合は、マーカーを使用できます。
s/@/@@/g
s/one/t@wo/
s/two/t@hree/
s/something/e@lse/
s/@\(.\)/\1/g