【问题标题】:how to remove an entire line in with a pattern using sed如何使用 sed 删除带有模式的整行
【发布时间】:2013-11-08 01:43:30
【问题描述】:

我有一个文件:

hi:: hello hai
welcome
bye

我想删除带有单词hi的行

我尝试了以下命令:

sed -i -e "/hi/d" filename

但输出是

 :: heloo hai

如何使用 sed 删除整行?那就是"hi::hello hai"这一行

【问题讨论】:

  • 奇怪,你的命令好像没问题。
  • 必须 sed 吗?看起来像典型的 grep -v.work
  • 您的文本文件或环境有问题。该命令对我来说在该内容上工作得很好。
  • @damienfrancois 可能需要 sed 来实现就地功能,以避免手动 grep 进入新文件并进行复制等。
  • 是否涉及MS windows?你可能有像 \r\n 这样的行尾。使用dos2unix file 清理它,然后重试。您的代码应该可以工作。祝你好运。

标签: sed


【解决方案1】:

立即尝试/^.*hi.*$/d can.t 测试,所以这是一个疯狂的猜测

【讨论】:

    【解决方案2】:

    这就足够了:

    sed -e '/hi/d' file
    

    经过测试并且有效。

    tom@eee ~ % cat test 
    hi:: hello hai
    welcome
    bye
    tom@eee ~ % sed -e '/hi/d' test
    welcome
    bye
    

    正如 damienfrancois 所说,grep 也可以:

    tom@eee ~ % grep -v 'hi' test 
    welcome
    bye
    

    【讨论】:

      【解决方案3】:

      使用awk 你可以做到这一点

      awk '!/^hi/' file
      welcome
      bye
      

      这将删除行首带有hi 的行。你没有说世界是否可以在句子的中间。如果是这样,请这样做:

      awk '!/hi/'
      welcome
      bye
      

      【讨论】:

        猜你喜欢
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-16
        • 2016-05-11
        • 1970-01-01
        • 2017-01-04
        • 1970-01-01
        相关资源
        最近更新 更多