Mac OSX
内の単一のsed
ステートメントを使用して複数の検索/置換を実行する方法を疑問に思っています。 Ubuntu
でこれを行うことができますが、BSD
のOSX
の性質のため、コマンドを少し変更する必要があります。
したがって、次の文字列を含むファイルを指定します。
"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ページ を見てみましたが、例が不足しているので、つなぎ合わせることができませんでした。
Appleのmanページには-eまたは-fオプションを使用して複数のコマンドを指定できますだから私は言います
find . -type f -exec sed -i '' -e s/Red/$color1/g -e s/Blue/$color2/g {} \;
これは確かにLinuxや他のUnicesで機能します。
セミコロン;
を使用してsed
コマンドを結合することも可能です。
find . -type f -exec sed -i '' -e "s/Red/$color1/g; s/Blue/$color2/g" {} \;
私はこれがどれほど移植性があり、 このStackoverflowの回答 へのリンク sed
のPOSIX仕様 を介して見つけられるのか疑問に思っていました。特に、実行するsedコマンドがたくさんある場合、これは複数のsed
式を書くよりも混乱しにくいようです。