Grep 两个单词之间的任何内容,只要它少于指定的字符数?

Grep 两个单词之间的任何内容,只要它少于指定的字符数?

我正在尝试使用类似“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 次。

相关内容