【问题标题】:Sed delete lines with more than one word, excluding a search termsed 删除包含多个单词的行,不包括搜索词
【发布时间】:2014-12-11 18:29:24
【问题描述】:

我目前正在尝试编写一个 sed 命令来搜索文件,并删除文件中包含多个单词的行。但是,我需要它来排除删除以特定符号开头的行(带有“[”)

这是我目前所拥有的(这里不包括排除一行的代码,只是删除多于一个单词的行):

sed -E '/^\s*\S+\s*$/!d' $1

我想用这样的方式排除以左括号(“[”)开头的搜索行:

sed -E '/a/!d/^\s*\S+\s*$/!d' $1

但是,我收到了这个错误:

sed: -e expression #1, char 6: extra characters after command

我敢肯定,我错过了一些小而荒谬的东西。有人可以帮忙吗?干杯。

【问题讨论】:

    标签: bash unix sed


    【解决方案1】:

    awk 命令会更简单:

    awk 'NF<2 || /(^| )\[/' file
    

    awk 将仅打印少于两个单词或以[ 开头的单词的行

    【讨论】:

    • 完美地完成了这项工作!绝对应该更多地研究awk。非常感谢!
    【解决方案2】:

    通过 sed,

    sed -n '/^ *[^ ]\+ \+[^ ]\+\|^ *\[/p' file
    

    【讨论】:

      【解决方案3】:

      我不确定你的命令,但以下会解决问题:

      sed -E '/^\s*\S+\s*$|^\[/!d' $1
      

      【讨论】:

        【解决方案4】:

        这可能对你有用(GNU sed):

        sed '/^[^[]\S*\s\+\S/d' file
        

        删除不以[ 开头且超过一个单词的行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多