我有三个文件foo1.txt
,foo2.txt
和foo3.txt
,其中包含以下行
# foo1.txt
JOBDONE
和
# foo2.txt
Execution halted
和
# foo3.txt
Execution halted
JOBDONE
我能够找到JOBDONE
和Execution halted
使用的内容:
find ./foo*.txt | xargs grep -l 'Execution halted' | xargs grep -l "JOBDONE"
但是找不到那些JOBDONE
或Execution 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
我对xargs
和exec
如何使用grep的理解有什么问题?如何使用grep或其他可移植命令来选择那些JOBDONE
而不是{Execution halted
的日志1}}或反之亦然?
答案 0 :(得分:2)
这是gnu awk
(由于RS中有多个字符而引起的gnu)
awk -v RS="#-#-#" '/JOBDONE/ && /Execution halted/ {print FILENAME}' foo*
foo3.txt
将RS
设置为不在文件中的内容,它会将所有行都设置为一个
然后测试长行是否包含两个字符串,如果是,则打印文件名