【问题标题】:How to show all lines before or after a match in grep? [duplicate]如何在grep中显示匹配之前或之后的所有行? [复制]
【发布时间】:2021-04-03 07:49:58
【问题描述】:

我发现我可以使用 grep -A10 "search string" file.txt 在文件中找到搜索字符串之后显示 10 行,或者使用 grep -B10 "search string" file.txt 显示之前的 10 行。如何设置它以显示比赛之前或之后的所有行?

例如,我有这个文件:

This is some text.
This is some more text.
This is some text.
This is some more text.
This is some text.
This is some yet more text.
This is some text.
---
This is some more text.
This is some text.
This is some more text.

在第一次搜索中,我需要打印在“---”之前找到的所有内容,无论有多少行。

而且我需要在第二次搜索中打印在“---”之后找到的所有内容,无论之后有多少行。

【问题讨论】:

  • grep 做不到。
  • 这可能对 GNU grep 有所帮助:grep -zo -- '.*---' filegrep -zo -- '---.*' file

标签: awk grep


【解决方案1】:

这可以在awk 中轻松完成,以防万一。

第一个解决方案:要获取所有行直到找到第一个字符串,可以尝试:

awk '1; /test/{exit}' Input_file

第二个解决方案:从字符串中获取行匹配到最后尝试:

awk '/test/{found=1} found' Input_file

【讨论】:

  • 不,我的意思是,我不想把它限制在 10 行,我的意思是如果之前有 1000 行,或者任何数到无穷大。
  • @Village,对不起,能否请您详细说明一下,我没有完全理解,我以为您想要比赛前后的10行,您要取号码吗来自变量等的行数?
  • 我是,我需要显示之前的所有行。或者,在不同的搜索中,找到后面的所有行。
  • @Village,好的,请在您的问题中添加一些示例,以便更好地理解您的问题。
  • @Village,您能否尝试我编辑的解决方案,如果对您有帮助,请告诉我。
【解决方案2】:

看来您的需要相当于找到匹配模式的行号。如果行号可用,您可以使用headtail 命令。

要获取行号,您可以先将行号添加到每行cat -n,然后执行grep

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多