【问题标题】:show n lines after a grep search在 grep 搜索后显示 n 行
【发布时间】:2014-11-04 20:20:10
【问题描述】:

在通过文件列表搜索文件内容中的模式后,我试图显示 5 行。我在 MacOSX shell 上运行它。

我试过这样做

grep -A5 'pattern' *.*

在这里我得到以下输出

filename
line1
filename
line2
filename
line3
filename
line4
filename
line5

然而,我只想将这些行作为输出而不是文件名。我理想的输出是 文件名

line1
line2
line3
line4
line5

我也尝试了以下方法,但没有奏效。

grep -l 'pattern' *.* | head -5
head -5 < grep -l 'pattern' *.*

知道如何在 shell 上执行此操作吗?

【问题讨论】:

  • 你能显示你的输入文件吗?
  • 这似乎是文件的内容。
  • @pogo:只有当我们知道您的输入数据是什么时,问题才会清楚。

标签: shell awk grep find


【解决方案1】:

如果您希望 grep 在有多个输入文件时从其输出中省略文件名,那么您应该使用 -h 选项(或者如果您的 grep 恰好是 GNU 风格,您可以使用 --no-filename 代替) .

此外,-A5 选项在每个匹配项周围提供(最多)5 行上下文。如果这就是您想要的,那么很好,但看起来您可能希望将 grep 限制为 5 个匹配项。对于每个文件最多 5 个,那将是 -m5,或者如果您只想要总共 5 个,则将其通过管道传输到 head -5

【讨论】:

    【解决方案2】:

    这应该适合你:

    cat *.* | grep -A 5 'pattern'
    

    但请说明您是否只想显示 (1) 总共 5 行,(2) 每个文件 5 行,或 (3) 每个模式匹配后的 5 行。我的答案适合最后一个,即每个模式匹配后的 5 行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多