지정된 문자 수보다 작은 경우 두 단어 사이에 무엇이든 Grep하시겠습니까?

지정된 문자 수보다 작은 경우 두 단어 사이에 무엇이든 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회까지 반복 가능합니다.

관련 정보