我正在尝试使用类似“John.*Smith”的模式,但不匹配两者之间的任何内容约翰和史密斯我想匹配单词之间的任何内容,只要它的长度不超过 X 个字符。
例如,如果 X = 5:
应该匹配的行:
- John Smith
- Jonh F. Smith
不应该匹配的行:
- John Ferdinand Smith
- Joe Brown; John Johson; Mary Smith
我怎样才能用 grep 做到这一点?
答案1
尝试使用“绑定”。
正则表达式:
界限是“{”后跟一个无符号十进制整数,可能后跟“,”,可能后跟另一个无符号十进制整数,总是后跟“}”。整数必须介于 0 和 RE_DUP_MAX (255(!)) 之间(包括 0 和 RE_DUP_MAX (255(!))),...
grep -E "John.{0,5}Smith" file
John Smith
John F. Smith
可以0
省略(编辑:在某些实现中):
grep -E "John.{,5}Smith" file
答案2
我会使用以下命令:
grep 'John.\{,5\}Smith'
.
适用于任何字符。
\{,5\}
最多可重复 5 次。