我有一个文本文件,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