grep 匹配两次出现的相同模式,且两次出现的模式之间有一定数量的字符

grep 匹配两次出现的相同模式,且两次出现的模式之间有一定数量的字符

我有一个文本文件,test其中包含以下字符串

MDXXXXXMD

虽然一般来说,X可以是任何字符,M也可以是F。我尝试使用以下grep命令选择此字符串:

grep '\(F\|M\)D.{,5}\(F\|M\)D' test

但是,这不会返回任何内容,这意味着正则表达式无法选择字符串。该\(F\|M\)D部分工作正常:

➜  ~ grep '\(F\|M\)D' test
MDXXXXXMD

不是.{,5}说每个字符最多出现 5 次吗?我漏掉了什么?

(如果这有区别的话,我是用 Mac 的)

答案1

在 Mac 上,我会尝试使用{0,5}而不是空条目 ( {,5})。因为空条目是 GNU 扩展,Mac 可能不支持它。

另外,就像其他正则表达式字符一样,应该转义的{和应该效果最好。}\{0,5\}

如果0存在问题(无效计数),那么您可以使用一组额外的括号来解决:

\(.\{1,5\}\)\?

这意味着 1 到 5 个字符是可选的。

答案2

您还应该避开括号:

grep '\(F\|M\)D.\{,5\}\(F\|M\)D' test

相关内容