grep里面从ls和head返回的文件

时间:2015-07-22 22:53:25

标签: linux bash grep ls unix-head

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

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

2 个答案:

答案 0 :(得分:3)

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

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

当然,如果你想继续搜索,我建议放弃"&&打破"

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天的时间。

答案 1 :(得分:0)

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

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

如果以别名书写或重复将来使用,请执行"正确的"需要更多打字的方式,但这并不会打破文件名中的空格和其他内容。