주변 단어와 일치하는 단어를 찾고 싶습니다.저도 빨리 됐으면 좋겠어요.
내가 얻은 것은 다음과 같습니다.
grep -o -P '(\w+ ){0,n}match( \w+){0,m}'
n은 문구 앞의 단어 수이고, m은 문구 뒤의 단어 수입니다. match는 제가 찾고 있는 문구입니다.
더 빠른 방법이 있나요?
예:
echo word1 word2 word3 123 word4 word5 word6 | grep -o -P '(\w+ ){0,2}123( \w+){0,2}'
=> word2 word3 123 word4 word5
.
답변1
(\w+ )
단어 또는 단어의 일부와 일치합니다. 즉, grep
모든 단어의 모든 문자를 잠재적인 일치 시작으로 처리한다는 의미입니다. 귀하의 예에서는 다음을 각각 고려합니다.
word1
ord1
rd1
d1
1
성공적인 매치로 넘어가기 전에 (에서 시작 word2
).
전체 단어를 찾는 데 관심이 있으므로 패턴에 단어 경계를 포함하여 중간 단어 일치 시도를 모두 방지할 수 있습니다.
grep -P '\<(\w+ ){0,2}123( \w+){0,2}\>'
이것의 또 다른 효과는 123
긴 단어 안에 나타날 때 일치를 방지하는 것입니다.
이로 인해 시간이 100배 단축되었습니다(테스트 사례: Ulysses에서 'me'라는 단어 검색).
"함정"섹션http://www.regular-expressions.info/examples.html정규식을 느리게 만드는 요소에 대한 좋은 조언이 있습니다.