sed-如何进行多次连续替换,但只处理一次文件?


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 

有没有更好的方法来做到这一点,它只会通过t1_spec.file一次,并且每行进行4次替换,而不是通过文件4次?

Answers:


43

除了使用分号外,还可以通过使用-e标志来给sed多个表达式:

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

14

在GNU中(例如,在我的Ubuntu计算机上),仅支持使用多行,并且效果很好,而且看起来不错(恕我直言),因为它避免了超长行,例如

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自动清除我从提要中获得的大多数常见错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.