「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回まで繰り返し可能です。