【问题标题】:Delete all strings containing x amount of something删除所有包含 x 数量的字符串
【发布时间】:2016-11-07 21:31:59
【问题描述】:

我有一个相当大的文本文件,其中包含如下所示的字符串:

//a/b/ww/d/ //b/d/we/c/ //a/b/as/d/e/ //af/y/x/f/e/ //b/d/we/c/

我正在尝试删除所有只有 6 个正斜杠的行。

斜线之间的文本是随机的,可以更长或更短。

期望的输出:

//a/b/as/d/e/ //af/y/x/f/e/

最有效的方法是什么?

【问题讨论】:

    标签: regex shell text sed


    【解决方案1】:

    这是为awk 量身定做的工作,根据/ 删除的NF(字段数)计数:

    awk -F/ 'NF != 7' file
    
    //a/b/as/d/e/
    //af/y/x/f/e/
    

    NF==7 表示一行中有 6 个斜杠(分隔符)。

    【讨论】:

      【解决方案2】:

      使用带有-v(反向匹配)标志的grep 来删除匹配/ 6 次出现的行。假设您的文件位于 @/tmp/test.txt,此命令将起作用:

      grep -Ev "^[^\/]*(\/[^\/]*){6}$" /tmp/test.txt
      

      我刚刚使用您的示例输入对其进行了测试:

      $ grep -Ev "^[^\/]*(\/[^\/]*){6}$" /tmp/test.txt
      //a/b/as/d/e/
      //af/y/x/f/e/
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 2017-09-28
        • 2020-07-27
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多