跳过文件行直到找到匹配项,然后输出其余行
我可以编写一个简单的脚本来执行此操作,但在我不断寻求更加熟悉 UNIX 的过程中,我想学习使用内置命令的有效方法。
我需要处理具有可变数量标题行的非常大的文件。 最后一个标题行由文本“LastHeaderLine”组成。 我希望输出此行之后的所有内容。 (我不担心误报匹配。)
I can write a trivial script to do this but in my ongoing quest to get more familliar with unix I'd like to learn efficient methods using built in commands instead.
I need to deal with very large files that have a variable number of header lines. the last header line consists of the text 'LastHeaderLine'. I wish to output everything after this line. (I'm not worried about false positive matches.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
类似于 Avi 的答案,但不包含带有“LastHeaderLine”的行。
Similar to the answer of Avi, but without including the line with "LastHeaderLine".
为什么不试试 awk 呢? 它看起来像这样:
其中 NR == 1 对于第一行为 true,/LastHeaderLine/ 与您的最后一个标题行匹配。 逗号运算符让以下函数 { next } 对两个正则表达式范围内的所有句子触发。 在这种情况下,它将跳到下一行输入,而不进行进一步操作。 对于所有其他输入行,它会将这些行打印到标准输出,您可以使用 > 重定向该输出。
Why not try awk for this? It would look like this:
where NR == 1 is true for the first line, /LastHeaderLine/ matches your last header line. The comma operator lets the following function { next } fire for all sentences in the range of the two regular expression. In this case it will skip to the next line of input without further operation. For all other input lines it will print the lines to the standard output, which you can redirect using >.
使用 sed:
将匹配从正则表达式匹配到文件末尾的所有内容。 'p' 打印匹配的行。
编辑:
再想一想,您不想打印与 LastHeaderLine 匹配的行。 这对于 sed 来说很难做到。 在 perl 中,您可以执行以下操作:
这将仅打印严格遵循正则表达式匹配的行。
Using sed:
will match everything from the regex match to the end of the file. 'p' prints the lines that match.
Edit:
On second thought, you don't want to print the line matching LastHeaderLine. This is difficult to do with sed. In perl, you could do the following:
This would print only lines strictly following the regex match.