我试图用 bash 实现以下结果:
grep
某些子字符串的文件。- 获取这些文件的文件名(可以包含空格)并打印它们。
- 打印每个文件名后,我想再次 grep ,但是这次仅在该文件内。
所以结果看起来像这样:
/tmp/file1.txt
it works!
/tmp/file2.txt
/tmp/file3.txt
it works!
我尝试构建这样的命令:
grep -irl "something" . | xargs -I % sh -c 'echo "%"; cat "%" | grep -i "another thing" "%"'
说明:grep -l
返回文件名。然后我打印这些文件名echo "%"
,然后我想在文件内进行 grep 。
但没有运气。这里有什么教训?
澄清一下:我的实际问题/目标是找到包含字符串 A 但也不包含字符串 B 的所有文件。
更多说明:我想要类似的东西,但我也grep A | grep -v B
想要匹配的所有文件的列表。A
答案1
这里有什么教训?
大概不要给布丁加太多鸡蛋。
%( > grep -l -r -- "$patternA" 。 | > 三通 /dev/fd/7 | > xargs grep -L --“$patternB” >) 7>&1