使用 grep [重复] 搜索两个连续模式,其间有任意数量的字符

使用 grep [重复] 搜索两个连续模式,其间有任意数量的字符

我想查找包含“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有所不同。

相关内容