我正在尝试grep或在目录中的每个文件中找到2个特定单词。然后,如果我发现使用这种组合找到多个文件 - 那么我应该将这些文件名打印到CSV文件中。
这是我到目前为止所尝试的内容:
find /dir/test -type f -printf "%f\n" | xargs grep -r -l -e 'ABCD1' -e 'ABCD2' > log1.csv
但是这将提供具有“ABCD1”和“ABCD2”的所有文件名。换句话说,即使只有一个具有此组合的文件,此命令也会打印文件名。
如果必须将文件名写入CSV,我需要为这两个单词grep整个目录,并且两个单词必须在多个文件中。我还应该能够包含子目录
任何帮助都会很棒!
由于
答案 0 :(得分:0)
查找 + GNU grep 解决方案:
find . -type f -exec grep -qPz 'ABCD1[\s\S]*ABCD2|ABCD2[\s\S]*ABCD1' {} \; -printf "%f\n" \
| tee /tmp/flist | [[ $(wc -l) -gt 1 ]] && cat /tmp/flist > log1.csv
替代方式:
grep -lr 'ABCD2' /dir/test/* | xargs grep -l 'ABCD1' | tee /tmp/flist \
| [[ $(wc -l) -gt 1 ]] && sed 's/.*\/\([^\/]*\)$/\1/' /tmp/flist > log1.csv