在文件中查找具有匹配 TODO 的小于 1 周的文件

Léo*_* 준영 -1 grep find perl

我不成功的提议

find ./ -newerct '1 week ago' -print | grep TODO
Run Code Online (Sandbox Code Playgroud)

虽然应该没有输出。

文件是文本文件,如

Lorem
% TODO check this out
Lorem ipsun
Run Code Online (Sandbox Code Playgroud)

如何找到与 TODO 匹配的不到 1 周的文件? 输出应该是 TODO 之后的行。Perl 解决方案也是受欢迎的,因为我也在练习它。

Jos*_* R. 5

改变这个:

find ./ -newerct '1 week ago' -print | grep TODO
Run Code Online (Sandbox Code Playgroud)

对此:

find ./ -newerct '1 week ago' -exec grep TODO {} +
Run Code Online (Sandbox Code Playgroud)

或这个:

find ./ -newerct '1 week ago' -print | xargs grep TODO
Run Code Online (Sandbox Code Playgroud)

解释

grep不会将 的输出解释find为要搜索的文件列表,而是作为其输入。也就是说,grep尝试匹配文件TODO名称而不是它们的内容

grep(1)手册页:

grep 搜索命名的输入文件(如果没有命名文件,或者如果给定单个连字符减号 (-) 作为文件名,则搜索标准输入)

匹配以下行TODO

find ./ -newerct '1 week ago' -exec grep -A1 TODO {} + | grep -v TODO
Run Code Online (Sandbox Code Playgroud)

这假设您有 GNU grep