Grep inside 从 ls 和 head 返回的文件

Grep inside files returned from ls and head

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

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

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

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 abaaba $(ls -t | head -5)   # DO NOT USE THIS IN A SCRIPT

如果用别名写这个或为了将来重复使用,请使用 "proper" 需要更多输入的方式,但不会破坏文件名中的空格和其他内容。