sed - 使用与Sed不同的分隔符删除

标签 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


$ 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/

相关文章:

linux - 文件转换和从 Linux 中的文件中删除特殊字符

bash - 有选择地从 'iptables -nvL' 命令输出中删除不必要的列空格吗?

regex - 通过匹配模式用另一个文本文件中的行替换字符串

regex - 使用 sed 时缺少空格

perl - 如何使用 sed/awk/perl 从数字中删除前导和尾随零?

linux - 在文件的一列中搜索并替换空值和点

linux - 将多行日志文件转换为 CSV

linux - 通过终端将 cat 结果中的确切内容替换为文件

bash - 将文本添加到制表符分隔文件中的特定列?

linux - sed 下一个 & 下一个命令