【问题标题】:sed remove lines that starts with a specific patternsed 删除以特定模式开头的行
【发布时间】:2020-11-04 12:02:34
【问题描述】:

我正在尝试将 sed 命令与可与 grep 配合使用的正则表达式模式一起使用。但它与 sed 命令不匹配。

我有一个文本文件,想删除以 (wow 或 waw) 开头的每一行。

这是我正在使用的命令,但它不起作用。

sed -i '/^w\(o\|a\)w/d' text.txt

我尝试使用与 grep 相同的模式,效果很好:

grep '^w\(o\|a\)w' text.txt 

sed 命令中的正则表达式有什么问题吗?

【问题讨论】:

    标签: regex bash sed


    【解决方案1】:

    使用 GNU sed,您可以使用

    sed -i '/^w[oa]w/d' file
    

    使用 FreeBSD sed,使用

    sed -i '' '/^w[oa]w/d' file
    

    这里,[oa] 是匹配oa 的括号表达式。

    查看online sed demo

    sed '/^w[oa]w/d' <<< "wow 1
    waw 2
    wiw 3"
    

    输出:wiw 3

    【讨论】:

    • 谢谢。这就是我要找的!
    • 原来的代码应该也能正常工作。我的猜测是您使用的是 macOS 或 BSD,需要说 sed -i '' '/^w\(a\|o\)w/d'(或者,当然,更简洁和惯用的 sed -i '' '/^w[ao]w/d')。
    • 您似乎删除了几个反斜杠。
    猜你喜欢
    • 2013-09-12
    • 2019-07-26
    • 2021-01-08
    • 2020-04-09
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多