如果我要做多次需要连续的替换,例如
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 次?
答案1
除了使用分号之外,您还可以使用标志为 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
反复使用同一组命令,则使用该文件特别有用。我曾经不得不处理脏数据提要,随着时间的推移,我最终得到了一个 88 行文件,该文件被调用massage.sed
来自动清除我从提要中得到的大多数常见错误。
答案3
在 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