"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회까지 반복 가능합니다.