如果我正在做几个需要连续的替换,例如
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
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点,只通过 t1_spec.file 一次并对每行进行 4 次替换,而不是通过文件 4 次?
jof*_*fel 73
除了使用分号,您还可以使用-e
标志为 sed 提供多个表达式:
sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/' t1_spec.rb
Run Code Online (Sandbox Code Playgroud)
Mic*_*ant 19
在 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
Run Code Online (Sandbox Code Playgroud)
kur*_*rtm 13
您可以使用分号分隔单引号之间的不同替换
sed -i 's/foo/bar/;s/abc/def/' t1_spec.rb
Run Code Online (Sandbox Code Playgroud)
或者你可以把所有这些命令在一个文件中,并指定与该文件-f
选项sed
。
sed -i -f my_sed_commands t1_spec.rb
Run Code Online (Sandbox Code Playgroud)
如果您要sed
反复使用同一组命令,则使用该文件特别有用。我曾经不得不处理一个脏数据提要,随着时间的推移,我最终得到了一个 88 行的文件,它被调用massage.sed
来自动清除我从提要中得到的大多数常见错误。