【问题标题】:Match empty lines in a file with 'grep'用 'grep' 匹配文件中的空行
【发布时间】:2013-09-05 03:31:10
【问题描述】:

为什么

grep -c '^\n' myfile.txt

当文件中有空行时返回0

如果有空行,那就换行开始吧?

如果我错了,请纠正我。

【问题讨论】:

    标签: regex shell unix grep


    【解决方案1】:

    grep 并像这样计算空行数:

    grep -c "^$" myfile.txt
    

    由于\n 被视为行尾,您需要使用行开始和行结束"^$"

    【讨论】:

      【解决方案2】:

      匹配行尾的正则表达式是$,而不是\n(因为grep 一次工作一行,它会忽略行间的换行符)。

      grep -c '^$' myfile.txt
      

      【讨论】:

      • 好的。知道了。我知道 grep 忽略行之间的换行符。谢谢!!
      • 准确地说,$ 是匹配字符串结尾的 RE 字符,而不是行尾。 grep 恰好将输入的每一行视为一个单独的字符串,因此使用 grep 时,每个字符串结尾 ($) 都会出现在行结尾但其他工具的行为不同的地方。 $ 在所有工具中总是意味着 the end of the string
      • @EdMorton 在不能有多行的情况下,EOL 和 EOS 是等价的。任何一次只处理一行的内容就是该上下文。
      • @Barmar 我明白你来自哪里,我只是在处理我认为很容易被误解的The regular expression to match the end of the line is $grep ... ignores the newlines between lines 的陈述。
      • 小心,-o grep 选项似乎忽略了空行。
      【解决方案3】:

      -c 的其他答案都是正确的。

      如果要查看文件中的空行是多少号:

      grep -n '^$' myfile.txt
      

      例如:

      grep -n '^$' /usr/share/wordlists/rockyou.txt
      4751:
      34329:
      50383:
      99361:
      154363:
      231236:
      562997:
      2459758:
      14344383:
      14344384:
      14344385:
      

      (如果你想删除它们:sed -i '/^$/d' myfile.txt

      :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        相关资源
        最近更新 更多