如何跳过打开/关闭范围模式的记录?

发布于 2024-12-18 04:43:58 字数 323 浏览 2 评论 0原文

gawk '/<Lexer>/,/<\/Lexer>/' file

这有效,但它打印第一条和最后一条记录,我想省略。怎么做呢?

它说:“打开范围模式的记录和关闭范围模式的记录都与范围模式匹配。如果不想对这些记录进行操作,可以在规则的操作中编写 if 语句以将它们与您感兴趣的记录。”但没有例子。 我尝试过类似的东西 gawk '//,/<\/Lexer>/' {1,FNR-1} 文件 但它不起作用。 如果您有更好的方法来做到这一点,而不使用 awk,请说出来。

gawk '/<Lexer>/,/<\/Lexer>/' file

this works but it prints the first and last records, which I'd like to omit. How to do so?

It says: "The record that turns on the range pattern and the one that turns it off both match the range pattern. If you don't want to operate on these records, you can write if statements in the rule's action to distinguish them from the records you are interested in." but no example.
I tried something like
gawk '/<Lexer>/,/<\/Lexer>/' {1,FNR-1} file
but it doesn't work.
If you have a better way to do this, without using awk, say so.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

当梦初醒 2024-12-25 04:43:58

您可以使用 2 个单独的匹配语句和一个变量

gawk '/<Lexer>/{p=1; next} /<\/Lexer>/ {p=0} p==1 {print}' file

This matches 并将 p 设置为 1,然后跳到下一行。当 p 为 1 时,它会打印当前行。当它匹配 时,它将 p 设置为 0 并跳过。当 p 为 0 时,打印被抑制。

You can do it with 2 separate match statements and a variable

gawk '/<Lexer>/{p=1; next} /<\/Lexer>/ {p=0} p==1 {print}' file

This matches <Lexer> and sets p to 1 and then skips to the next line. While p is 1 it prints the current line. When it matches </Lexer> it sets p to 0 and skips. As p is 0 printing is suppressed.

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