Command line 如何在文件列表中搜索同一行上存在的多个值?

Command line 如何在文件列表中搜索同一行上存在的多个值?,command-line,grep,Command Line,Grep,我试图在一个包含大量html文件的目录中进行搜索,以找到那些在同一行中包含精确值的文件。这应该起作用: grep -iwc 'word1' -sl | xargs grep -iwc 'word2' -s 但一次只能处理一个文件。我试过这样的方法: find . -iname '*html' | xargs grep -iwc 'word1' -sl | xargs grep -iwc 'word2' -s 但这似乎显示了包含这两个值中任何一个的文件,所以即使是不在同一行的文件 输出应仅为文

我试图在一个包含大量html文件的目录中进行搜索,以找到那些在同一行中包含精确值的文件。这应该起作用:

grep -iwc 'word1' -sl | xargs grep -iwc 'word2' -s
但一次只能处理一个文件。我试过这样的方法:

find . -iname '*html' | xargs grep -iwc 'word1' -sl | xargs grep -iwc 'word2' -s
但这似乎显示了包含这两个值中任何一个的文件,所以即使是不在同一行的文件

输出应仅为文件名和出现次数,如:

file.html:2

如果可以将这2个grep分组?或者用另一种方法进行搜索?

扩展正则表达式可能会有所帮助。也许是这样的

find . -iname '*html' | xargs egrep -iwl '(word1.*word2|word2.*word1)'

因为您只需要查找两个单词,所以列出所有排序方式并不难。

您是匹配特定的搜索词还是只查找每个对应的匹配行?我要查找与同一行中的相同word1和word2(或string2)匹配的所有文件,然后像file.html:x那样输出,其中x是出现的次数。小灵通的答案似乎起到了作用:)这似乎有效:)如果使用一个单词和一个字符串,也会有效,对吗?例如word1和'this string of words'在同一行,但是没有引号(因为带引号它什么也不返回)。是的,只要它可以形成正则表达式。字母和空格无需特殊处理即可使用。谢谢您的回答。你不会相信我找这个有多久了。这也可以扩展到搜索单词1和(单词2或单词3)?上面的
表示“或”。所以也许
word1.*(word2 | word3)
。如果你有时间,阅读“正则表达式”应该会有所帮助。