たとえば、連続交換が必要な複数の交換を実行する場合
sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb
sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb
sed -i 's/\.should/\.to/' t1_spec.rb
sed -i 's/==/eq/' t1_spec.rb
t1_spec.fileを1回だけ繰り返し、ファイルを4回繰り返すのではなく、1行に4回の置換を実行するより良い方法はありますか?
答え1
セミコロンを使用することに加えて、flagsを使用してsedに複数の式を提供できます-e
。
sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/' t1_spec.rb
答え2
セミコロンを使用して、一重引用符間の異なる代替文字を区別できます。
sed -i 's/foo/bar/;s/abc/def/' t1_spec.rb
-f
または、これらすべてのコマンドをファイルに入れてくださいsed
。
sed -i -f my_sed_commands t1_spec.rb
このファイルは、同じコマンドセットを引き続き使用する場合にsed
特に便利です。私はかつて汚れたデータフィードを処理しなければなりませんmassage.sed
でした。
答え3
GNU(私のUbuntuシステムなど)では、単に複数行を使用することがサポートされており、これは複数の置換を意味すると推論されます。たとえば、非常に長い行を避けるため、うまく機能し、ビューにもよく見えます(IMHO)。
sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/
/expect(browser.*\.should/s/\.should/).should/
s/\.should/\.to/
s/==/eq/' t1_spec.rb