1. ホーム
  2. replace

[解決済み】sedでパターンに基づいたテキストを一度に入れ替えるには?

2022-03-27 18:01:34

質問

abbc'という文字列があり、置き換えたいのですが。

  • ab -> bc
  • bc -> ab

2つの置き換えを試すと、結果は私の望むものではありません。

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

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

echo abbc | sed SED_COMMAND
bcab

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

どのように解決するのですか?

こんな感じでしょうか。

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

交換 ~ を文字列に含まれないと分かっている文字で置き換える。