使用Sed的不同分隔符删除

cal*_*shy 25 sed

相当肯定我错过了一些明显的东西!

$ cat test.txt
  00 30 * * * /opt/timebomb.sh >> timebomb.log
  01 30 * * * /opt/reincarnate.sh >> reincarnation.log
$ sed ':timebomb:d' test.txt
  00 30 * * * /opt/timebomb.sh >> timebomb.log
  01 30 * * * /opt/reincarnate.sh >> reincarnation.log
Run Code Online (Sandbox Code Playgroud)

$ sed '/timebomb/d' test.txt
  01 30 * * * /opt/reincarnate.sh >> reincarnation.log
Run Code Online (Sandbox Code Playgroud)

为什么会这样?d命令不支持一组不同的分隔符吗?

Sto*_*bor 37

//您使用的分隔符不是d命令,而是用于寻址.我认为你将它们与s///命令中的斜杠进行比较......然而,尽管两者都与正则表达式有关,但它们是不同的上下文.

地址(出现命令之前)过滤命令所应用的行...选项(出现命令之后)用于控制应用的替换.

如果要在地址中使用不同的分隔符作为正则表达式,则需要使用反斜杠启动地址:

$ sed '\:timebomb:d' test.txt
  01 30 * * * /opt/reincarnate.sh >> reincarnation.log
Run Code Online (Sandbox Code Playgroud)

(要了解地址和选项之间的区别,请考虑命令的输出:

$ sed '/timebomb/s/log/txt/' test.txt
Run Code Online (Sandbox Code Playgroud)

地址只选择包含正则表达式的行timebomb,但选项告诉s命令用正则表达式log替换txt.)