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

发布于 2024-07-07 07:52:32 字数 161 浏览 6 评论 0原文

我可以编写一个简单的脚本来执行此操作,但在我不断寻求更加熟悉 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

似梦非梦 2024-07-14 07:52:32

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

sed -e '1,/LastHeaderLine/d'

Similar to the answer of Avi, but without including the line with "LastHeaderLine".

sed -e '1,/LastHeaderLine/d'
鹿港小镇 2024-07-14 07:52:32

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

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

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

Why not try awk for this? It would look like this:

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

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 >.

把梦留给海 2024-07-14 07:52:32

使用 sed:

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

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

编辑:

再想一想,您不想打印与 LastHeaderLine 匹配的行。 这对于 sed 来说很难做到。 在 perl 中,您可以执行以下操作:

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

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

Using sed:

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

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:

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

This would print only lines strictly following the regex match.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文