指定された文字数より少ない場合は、2つの単語の間に何をGrepしますか?

指定された文字数より少ない場合は、2つの単語の間に何をGrepしますか?

「John.*Smith」のようなパターンを使用しようとしていますが、それらの間に一致するものはありません。そしてスミスX文字の長さを超えない限り、単語間のすべての項目を一致させたい。

たとえば、X = 5の場合:

一致する必要がある行:

- John Smith
- Jonh F. Smith

一致しないはずの行:

- John Ferdinand Smith
- Joe Brown; John Johson; Mary Smith

grepを使ってこれを行うにはどうすればよいですか?

答え1

「バインディング」を試してみてください。

正規表現:

境界は「{」の後に符号なし10進整数が続き、その後には「、」が続き、他の符号なし10進整数が続く可能性があり、その後には常に「}」が続きます。整数は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回まで繰り返し可能です。

関連情報