我不成功的提议
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 解决方案也是受欢迎的,因为我也在练习它。
改变这个:
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
。