web-dev-qa-db-ja.com

1つのsedコマンドで複数の置換

Mac OSX内の単一のsedステートメントを使用して複数の検索/置換を実行する方法を疑問に思っています。 Ubuntuでこれを行うことができますが、BSDOSXの性質のため、コマンドを少し変更する必要があります。

したがって、次の文字列を含むファイルを指定します。

"Red Blue Red Blue Black Blue Red Blue Red"

結果が出力されるsedステートメントを実行したい:

"Green Yellow Green Yellow Black Yellow Green Yellow Green"

修飾findを使用した2つのsedステートメント

color1="Green"  
color2="Yellow"  
find . -type f -exec sed -i '' s/Red/$color1/g {} \;  
find . -type f -exec sed -i '' s/Blue/$color2/g {} \;  

セミコロンとスラッシュの組み合わせをいくつか試し、 sedのAppleのDev manページ を見てみましたが、例が不足しているので、つなぎ合わせることができませんでした。

24
user1026361

Appleのmanページには-eまたは-fオプションを使用して複数のコマンドを指定できますだから私は言います

find . -type f -exec sed -i '' -e s/Red/$color1/g -e s/Blue/$color2/g {} \;

これは確かにLinuxや他のUnicesで機能します。

24
Lars Brinkhoff

セミコロン;を使用してsedコマンドを結合することも可能です。

find . -type f -exec sed -i '' -e "s/Red/$color1/g; s/Blue/$color2/g" {} \;

私はこれがどれほど移植性があり、 このStackoverflowの回答 へのリンク sedのPOSIX仕様 を介して見つけられるのか疑問に思っていました。特に、実行するsedコマンドがたくさんある場合、これは複数のsed式を書くよりも混乱しにくいようです。

11
FooF