【问题标题】:Delete lines in a text file that contain a specific string with /删除文本文件中包含带有 / 的特定字符串的行
【发布时间】:2020-01-03 06:53:18
【问题描述】:

我有一个日期格式如下的文本文件:27/8/2019 我想删除除包含 27/8/2019 的行之外的所有行

如果我使用 sed,那就是:

sed -i '/pattern/!d' file.txt

问题是当我有一个带有'/'的模式时,我有下一个错误:

sed: -e expression #1, char 5: unknown command: `8'

【问题讨论】:

  • 请注意,“可能重复”的接受解决方案在这种情况下不起作用。使用替代分隔符适用于替换,但不匹配。转义斜线对两者都有效,但会使替换命令难以阅读。
  • 请注意,在这种情况下使用 grep 会更容易。
  • 我必须吃掉我最后的评论;正如@Cyrus 指出的那样,如果您在正确的位置使用反斜杠,可以使用替代分隔符进行模式匹配。

标签: linux bash text sed


【解决方案1】:

转义斜线:

sed -i '/27\/8\/2019/!d' file.txt

【讨论】:

  • 或者从/切换到另一个字符:\|27/8/2019|!d
  • @Cyrus:我使用 sed 多年,但从来不知道这个技巧。
【解决方案2】:

使用awk

awk '/27\/8\/2019/' file.txt

如果日期只是一个示例,请使用它来保留所有日期线:

awk '/[0-9]+\/[0-9]+\/[0-9]+/' file.txt

awk更新文件

awk '-your code-' file.txt > tmp && mv tmp file.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2012-07-02
    • 2011-09-05
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多