【问题标题】:delete a line if a condition occurs using awk or sed如果使用 awk 或 sed 发生条件,则删除一行
【发布时间】:2019-01-23 07:57:54
【问题描述】:

只需要你的帮助。如果使用 awk 或 sed 出现这种格式,我想删除一行:

BSC+number     BSC+number

例如:

BSC112         BSC112
core           tag
red            blue
BSC113         BSC114
flu            joke

输出应该是:

core           tag
red            blue 
flu            joke  

提前感谢您的帮助。

【问题讨论】:

    标签: linux unix sed awk


    【解决方案1】:

    一种方式:

    $ sed '/^BSC[0-9]\+\s\+BSC[0-9]\+$/d' file 
    core           tag
    red            blue 
    flu            joke 
    

    您可以使用-i 选项和sed 将更改存储回文件:

    $ sed -i '/^BSC[0-9]\+\s\+BSC[0-9]\+$/d' file
    

    【讨论】:

    • 这也会删除BSCBSC。您可以将* 更改为\+\{1,\} 以进行更改。
    • \+\s\+的扩展是什么?我试过BSC[0-9]* [ ]*BSC[0-9]* 这似乎也可以正常工作
    • 嗨,伙计。谢谢你的回答。真的很感激。但是在尝试了你的命令之后。它删除了所有文本。
    • 不可能,使用的正则表达式与@Thor 相同,除了\s 用于空格而不是文字空间,我的锚定以匹配整行。要么它们都不起作用,要么它们都起作用,或者您做了不同的事情。见ideone.com/Vqs0Iu
    • @jonas 并非所有 seds 都支持 ERE(即使有转义),也不是所有 seds 都支持 \s 作为空格的简写,所以也许其中之一就是它不适合您的原因。适用于所有 seds 的可移植方式是 sed -i '/^BSC[0-9][0-9]*[ \t][ \t]*BSC[0-9][0-9]*$/d' file,所以试试吧,如果这不起作用,那就是你正在做的事情。
    【解决方案2】:

    您也可以使用 grep 执行此操作:

    grep -v 'BSC[0-9]\+[[:space:]]\+BSC[0-9]\+' infile
    

    输出:

    core           tag
    red            blue 
    flu            joke 
    

    【讨论】:

    • 谢谢你!您可能不会使用 sed 或 awk,但这回答了我的问题。谢谢!
    • [[:space:]]\+ 会考虑制表符和空格。
    【解决方案3】:

    另一种方式:

    perl -lne 'print unless(/BSC\d+\s+BSC\d+/)' your_file
    

    测试:

    > cat temp
    BSC112         BSC112
    core           tag
    red            blue
    BSC113         BSC114
    flu            joke
    > perl -lne 'print unless(/BSC\d+\s+BSC\d+/)' temp
    core           tag
    red            blue
    flu            joke
    

    【讨论】:

      【解决方案4】:

      awk '!/BSC/{print}' 输入 > 输出

      【讨论】:

      • 您的解决方案不能完全回答需要 BSC+number 连续两次的问题。更多 SO 答案应该是对社区的帮助,并且应该包括一些解释。您能否更新您的答案以符合 SO 标准?
      • 欢迎来到 Stack Overflow。 “仅代码”的答案是不受欢迎的,尤其是在存在多个答案并且其中一个已被问题发布者选择的情况下。请通过添加对您的代码的作用和/或为什么您的答案比已经发布的更好的解释来改进您的帖子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2013-02-27
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多