可以肯定的是,我缺少明显的东西!
$ 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
而
$ sed '/timebomb/d' test.txt
01 30 * * * /opt/reincarnate.sh >> reincarnation.log
为什么会这样呢?
d
命令是否支持一组不同的定界符?
最佳答案
您使用的定界符//
并非用于d
命令,它们是用于寻址的。我认为您正在将它们与s///
命令中的斜杠进行比较...尽管它们都与正则表达式有关,但是它们是不同的上下文。
地址(在命令之前显示为)过滤该命令所应用的行...选项(在命令之后显示为)用于控制所应用的替换。
如果要对地址中的正则表达式使用不同的分隔符,则需要以反斜杠开始地址:$ sed '\:timebomb:d' test.txt
01 30 * * * /opt/reincarnate.sh >> reincarnation.log
(要了解地址和选项之间的区别,请考虑命令的输出:$ sed '/timebomb/s/log/txt/' test.txt
地址仅选择包含正则表达式timebomb
的行,但这些选项告诉s
命令用log
替换正则表达式txt
。)
关于sed - 使用与Sed不同的分隔符删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1797906/