1. ホーム
  2. replace

[解決済み] sedで複数のパターンを一度に置き換えるには?

2022-01-30 02:57:44

質問

例えば、'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'

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