sed を使ってパターンに基づいてテキストを一度に交換するにはどうすればいいですか? 質問する

sed を使ってパターンに基づいてテキストを一度に交換するにはどうすればいいですか? 質問する

「abbc」という文字列があり、次のように置き換えたいとします。

  • アブ→ BC
  • 紀元前 -> アブ

2 つの置換を試みると、結果は期待したものと異なります。

echo 'abbc' | sed 's/ab/bc/g;s/bc/ab/g'
abab

では、以下のように置き換えるにはどの sed コマンドを使用すればよいでしょうか?

echo abbc | sed SED_COMMAND
bcab

編集: 実際には、テキストには 2 つ以上のパターンがある可能性があり、必要な置換の数がわかりません。これはsedストリーム エディターであり、その置換は貪欲であるという回答があったので、そのためには何らかのスクリプト言語を使用する必要があると思います。

ベストアンサー1

おそらく次のようになります:

sed 's/ab/~~/g; s/bc/ab/g; s/~~/bc/g'

~文字列に含まれないことが分かっている文字に置き換えます。

おすすめ記事