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

Mic*_*ant 44 sed

如果我正在做几个需要连续的替换,例如

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

  • 并且示例会很好并且节省了很多冗长的内容。 (3认同)