【问题标题】:find file names by searching the last lines for pattern通过在最后一行搜索模式来查找文件名
【发布时间】:2013-06-17 21:51:35
【问题描述】:

我必须在大量包含特定模式的大型 ASCII 文件中找到所有文件。目前我正在这样做

grep -l <pattern> <files>

而且速度很慢。 但我知道该模式出现在最后 10 行中,如果存在的话。是否有一种优雅的可能性只搜索最后几行以加快搜索速度,例如用 awk 吗?

【问题讨论】:

  • 好吧,也许我理解错了,但是如果我使用tail并将输出传递给grep,我无法获取文件名,因为grep的输入来自标准输入。
  • 管道很慢,使用更好的文件。

标签: sed awk grep


【解决方案1】:

您可以在处理时简单地打印文件名

for f in $files; do
  echo "---- File \"$f\" ------"
  tail -n 10 "$f" | grep -l "$pattern"
  # you can also save the stdout to $f...
done

【讨论】:

  • 或:tail -n 10 "$f" | grep -q "$pattern" &amp;&amp; echo "$f"
  • 感谢引号,我不知道我怎么会忘记 :D 我也想使用他的 grep 语法并在文件前回显名称:)
  • 谢谢,正是我需要的!
【解决方案2】:

要查看文件的特定行数,则命令语法如下。

tail [+ number] [-l] [-b] [-c] [-r] [-f] [-c number | -n number] [file]

现在您可以使用 pipe 来命令 greap 和 cat 来执行您的特定工作。

tail -n 10 &lt;fileName&gt;|grep -l &lt;pattern&gt; &lt;files&gt;

Click here了解更多。

【讨论】:

  • 但是,如果我将 grep 的输出通过管道传递给任何其他命令,在本例中为 tail,是什么阻止了 grep 搜索每个文件的每一行?
猜你喜欢
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多