【问题标题】:Skip file lines until a match is found, then output the rest跳过文件行直到找到匹配项,然后输出其余的
【发布时间】:2010-09-16 20:44:33
【问题描述】:

我可以编写一个简单的脚本来执行此操作,但在我不断寻求更熟悉 unix 的过程中,我想学习使用内置命令的有效方法。

我需要处理具有可变数量的标题行的非常大的文件。最后一个标题行由文本“LastHeaderLine”组成。我希望在此行之后输出所有内容。 (我不担心误报匹配。)

【问题讨论】:

    标签: unix text-processing


    【解决方案1】:

    Avi的答案类似,但不包括带有“LastHeaderLine”的行。

    sed -e '1,/LastHeaderLine/d'
    

    【讨论】:

    • 那比我的干净多了 :-)
    【解决方案2】:

    为什么不试试 awk 呢?它看起来像这样:

    awk 'NR == 1, /LastHeaderLine/ { next } { print }' myinputfile > myoutputfile
    

    其中 NR == 1 对于第一行为 true,/LastHeaderLine/ 匹配您的最后一个标题行。逗号运算符让以下函数 { next } 为两个正则表达式范围内的所有句子触发。在这种情况下,它将跳到下一行输入,无需进一步操作。对于所有其他输入行,它会将这些行打印到标准输出,您可以使用 >.

    对其进行重定向

    【讨论】:

      【解决方案3】:

      使用 sed:

      sed -ne '/LastHeaderLine/,$p' <inputfile
      

      将匹配从正则表达式匹配到文件末尾的所有内容。 'p' 打印匹配的行。

      编辑:

      再三考虑,您不想打印匹配 LastHeaderLine 的行。 sed 很难做到这一点。在 perl 中,您可以执行以下操作:

      perl -ne 'if ($flag) {print;} if (/LastHeaderFile/) {$flag=1;}' <inputfile
      

      这将只打印严格遵循正则表达式匹配的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多