我想查找包含“word1 ... word2”的行,其中“...”可以是任何不同的字符。到目前为止,我已经使用了两个 grep 来实现相同的目的,如下所示:
grep "$word1" $filename | grep "$word2"
有没有更快的方法可以通过假设这样的事情来做到这一点:
grep "$word1*$word2" $filename
其中 * 可能是一些特殊字符,也可以是任何其他字符?
答案1
使用.*
:
grep "${word1}.*${word2}" "$filename"
.
匹配任何字符*
匹配任意数量的前面的字符
答案2
如果你需要这两个词分隔的,即如果你这样做不是abba
如果其中一个单词是想要匹配bb
,则使用
grep "\\<$word1\\>.*\\<$word2\\>" "$filename"
该模式\<
(此处\\<
是为了转义 shell 中的第一个反斜杠)仅在单词之前匹配,并且\>
工作方式类似,但仅在单词之后。
有 alo\b
可以匹配 before 和 after,并且[[:<:]]
其[[:>:]]
作用就像\<
and一样\>
。由哪些实施者grep
有所不同。