我一直在使用以下命令递归搜索目录中的字符串。
grep -Rn "myString" *
我想知道是否有人会如此善良地教我如何搜索多个 递归地在同一文件中的字符串。也就是说,我想找到所有两者" String1" 和" String2。"
如果我能知道文件中包含两个字符串的每个字符串的行号,那就太好了。
我一直在尝试几件事而没有成功。我想在基本目录中开始搜索,并递归搜索所有子目录。如果有人可以帮助我,我会非常感激。
答案 0 :(得分:4)
将您的第一次搜索结果再次发送到grep
:
grep -RlZ "String1" . | xargs -0 grep -l "String2"
这会列出包含String1
和String2
的文件。
获取包含两个字符串的文件的行号可能不太高效,因为您需要知道先验。一种方法是再次将结果传递给grep
:
grep -RlZ "String1" . | xargs -0 grep -lZ "String2" | xargs -0 grep -En 'String1|String2'
答案 1 :(得分:3)
您可以find
级联支票:
find . -type f -exec fgrep -q 'myString1' {} \; \
-exec fgrep -q 'myString2' {} \; \
-exec fgrep -q 'myString3' {} \; \
-print
答案 2 :(得分:0)
grep --null -rl String1 . | xargs -0 grep --null -l String2 | xargs -0 grep -n -e String1 -e String2
有几种方法可以做到这一点,但由于您需要具有两个匹配字符串的文件,您可以找到一个匹配的文件名,然后重新扫描它们。第一个grep找到第一个模式的文件名;第二个重新扫描这些文件的第二个字符串。最后,第三个grep打印出带有匹配的行号。