查找具有正则表达式匹配且不同正则表达式不匹配的文件

时间:2015-02-26 16:16:34

标签: regex grep

我有三个文件foo1.txtfoo2.txtfoo3.txt,其中包含以下行

# foo1.txt
JOBDONE

# foo2.txt
Execution halted

# foo3.txt
Execution halted
JOBDONE

我能够找到JOBDONEExecution halted使用的内容:

find ./foo*.txt | xargs grep -l 'Execution halted' | xargs grep -l "JOBDONE"

但是找不到那些JOBDONEExecution halted而不是两者的文件。我试过了:

find ./foo*.txt | xargs grep -lv "JOBDONE"  | xargs grep -l "Execution halted"
find ./foo*.txt -exec grep -lv "JOBDONE" {} \;  | xargs grep -l "Execution halted"    

但是(根据我的理解)返回

是错误的
./foo2.txt
./foo3.txt

我对xargsexec如何使用grep的理解有什么问题?如何使用grep或其他可移植命令来选择那些JOBDONE而不是{Execution halted的日志1}}或反之亦然?

1 个答案:

答案 0 :(得分:2)

这是gnu awk(由于RS中有多个字符而引起的gnu)

awk -v RS="#-#-#" '/JOBDONE/ && /Execution halted/ {print FILENAME}' foo*
foo3.txt

RS设置为不在文件中的内容,它会将所有行都设置为一个 然后测试长行是否包含两个字符串,如果是,则打印文件名