跳过文件行直到找到匹配项,然后输出其余的

时间:2008-10-13 09:55:58

标签: unix text-processing

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

我需要处理具有可变数量标题行的非常大的文件。最后一个标题行包含文本'LastHeaderLine'。我想在这一行之后输出所有内容。 (我并不担心误报。)

3 个答案:

答案 0 :(得分:24)

Avi的答案类似,但未包含“LastHeaderLine”的行。

sed -e '1,/LastHeaderLine/d'

答案 1 :(得分:10)

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

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

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

重定向

答案 2 :(得分:7)

使用sed:

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

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

编辑:

第二个想法,你不想打印匹配LastHeaderLine的行。这很难用sed。在perl中,您可以执行以下操作:

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

这将严格按照正则表达式匹配打印行。