sed-複数の連続した置換を行うが、ファイルを1回だけ処理する方法


31

連続する必要があるいくつかの置換を行っている場合、例えば

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 

ファイルを4回通過するのではなく、t1_spec.fileを1回だけ通過し、各行の4つの置換を行うこれを行うより良い方法はありますか?

回答:


43

セミコロンを使用するほかに、-eフラグを使用してsedに複数の式を指定することもできます。

sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/'  t1_spec.rb 

14

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 

5

セミコロンを使用して、単一引用符の間の異なる置換を分離するか、それらのすべてのコマンドをファイルに入れて、-fオプションを使用してファイルを指定できますsed

同じsedコマンドセットを繰り返し使用する場合は、ファイルを使用すると特に便利です。以前はダーティなデータフィードを処理しなければならなかったため、88行のファイルを呼び出しmassage.sedて、フィードからよくある間違いのほとんどを自動的にクリアしました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.