编辑
我正在寻找一个同时使用 GREP 和 FIND 的命令来实现下面列出的条件。
每个日志文件都包含出现两次的字符串模式“226 传输完成”。在某些文件中,它只出现一次或为零。我需要捕获出现零次和一次的文件名列表。以下命令仅在文件中未找到搜索模式时才有效(即仅适用于计数“零”)。
find . -type f -name "*.log" ! -exec grep -q "226 Transfer complete." {} \; - print
我正在使用 grep 版本 (GNU grep) 2.20。我还需要在文本文件中捕获结果。
答案1
grep -lR '226 Transfer complete\.' --include='*.log'
答案2
您可以用于awk
计算出现次数并在计数小于时打印文件名n
:
find . -type f -name \*.log -exec awk -vn=2 'BEGIN{c=0};
/PATTERN/{++c; if (c==n){exit}};END{if (c<n){print FILENAME}}' {} \;
一旦n
(在本例中2
)找到匹配项,计数就会停止。