【问题标题】:Grep inside files returned from ls and headGrep 从 ls 和 head 返回的文件内部
【发布时间】:2015-07-22 22:53:24
【问题描述】:

我有一个包含大量文件的目录。我正在尝试搜索位于至少一个文件中的文本。该文本可能位于较新的文件之一中。执行此操作的命令是什么?我认为它看起来像ls -t | head -5 | grep abaaba

例如,如果我从ls -t | head -5 返回了 5 个文件: - file1、file2、file3、file4、file5,我需要知道哪些文件包含abaaba

【问题讨论】:

  • 通常,假设您的文件名或目录名中没有空格(空格、制表符、换行符等),则:ls -t | head -5 | xargs grep abaaba。如果周围有空白,则必须更加努力;目前尚不清楚ls 是答案的一部分(它更可能是问题的一部分)。
  • xargs : abaaba : 没有这样的文件或目录
  • 您是否加入了xargs grep abaaba?听起来好像您省略了grep

标签: linux bash grep ls unix-head


【解决方案1】:

目前还不清楚您要做什么。但我认为效率是您的主要目标。我会使用类似的东西:

ls -t | while read -r f; do grep -lF abaaba "$f" && break;done

这将只打印包含该字符串的第一个文件并停止搜索。如果您想查看实际行,请使用 -H 而不是 -l。如果你有正则表达式而不是单纯的字符串 drop -F 这将使 grep 运行速度变慢。

ls -t | while read -r f; do grep -H abaaba "$f" && break;done

当然,如果您想继续搜索,我建议您删除“&& break”。

ls -t | while read -r f; do grep -HF abaaba "$f";done

如果您对时间范围有一些想法,最好尝试查找。

find . -maxdepth 1 -type f -mtime -2 -exec grep -HF abaaba {} \;

您可以在 -mtime 之后提高数字以覆盖过去 2 天以上。

【讨论】:

  • 使用您的命令,您将丢失有关文件名的信息。整个问题似乎是找到那些文件名,所以,在我看来,最好使用grep -H
【解决方案2】:

如果您只是以交互方式执行此操作,并且您知道文件名中没有空格,那么您可以这样做:

grep abaaba $(ls -t | head -5)   # DO NOT USE THIS IN A SCRIPT

如果将其写入别名或供将来重复使用,请以“正确”的方式进行,这需要更多的输入,但不会破坏文件名中的空格和其他内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2011-12-10
    相关资源
    最近更新 更多