【问题标题】:Remove Lines less than 3 words in a Text File删除文本文件中少于 3 个单词的行
【发布时间】:2014-11-11 01:09:47
【问题描述】:

我见过一些命令,例如使用 sed 根据字符数而不是单词来删除行。

例如。我有一个文本文件,例如

word1
word1 word2
word1 word2 word3
word1 word2 word3 word4
word1 word2 word4 word5

我将如何使用(sed 或 awk)删除少于 3 个单词的行,因此输出如下所示:

word1 word2 word3
word1 word2 word3 word4
word1 word2 word4 word5

【问题讨论】:

    标签: linux bash unix awk sed


    【解决方案1】:

    你可以在 awk 中简单地做到这一点,

    $ awk 'NF>=3' file
    word1 word2 word3
    word1 word2 word3 word4
    word1 word2 word4 word5
    

    打印具有三个或更多字段的行。

    【讨论】:

    • WOWWWWWWWWWWWWWWWWWWWWWWWWWWWW
    • 为什么要长哇?你可以通过投票来表达你的感受:-)
    • 同时回答类似
    • 酷就这么简单!谢谢;d
    【解决方案2】:

    这里是使用awk的方法,如果超过2字段,打印它:

    awk 'NF>2' file
    word1 word2 word3
    word1 word2 word3 word4
    word1 word2 word4 word5
    

    【讨论】:

    • 哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇
    • 酷就这么简单!谢谢;d
    【解决方案3】:
    sed -n '/[^ ]\([^ ]*  *[^ ]\)\{2\}/ p' YourFile
    # or
    sed -n '/[^ ]  *[^ ][^ ]*  *[^ ]/ p' YourFile
    

    Regx 是:至少 1 个非空格 至少 1 个空格 至少 1 个非空格 至少 1 个空格 至少 1 个非空格

    以确保 (word1 word2) 不会将环绕空间作为单词分隔符,并且在末端没有要分隔的单词

    【讨论】:

      【解决方案4】:

      你可以试试是sed命令

      sed -n 's/\([^ ]\+ \)\{2,\}/&/p' file_name
      
      [^ ] - until space match each characters
      {2,} - which is used to match the preceding pattern more than 2
      ([^ ]\+ ) - Which is used to match the word.
      

      【讨论】:

      • 你可以简单地使用这个sed -n '/\([^ ]* \)\{2,\}/p' file
      • ([^ ]* ) - 用于将至少 1 个空格与最终的非空格匹配,因此也没有单词匹配。 ([^ ]+ ) - 匹配一个单词。 (假设样本中只有空格和字母数值)
      【解决方案5】:

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

      sed -n 's/\<//3p' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多