주변 단어와 일치하는 항목을 찾는 방법은 무엇입니까?

주변 단어와 일치하는 항목을 찾는 방법은 무엇입니까?

주변 단어와 일치하는 단어를 찾고 싶습니다.저도 빨리 됐으면 좋겠어요.

내가 얻은 것은 다음과 같습니다.

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정규식을 느리게 만드는 요소에 대한 좋은 조언이 있습니다.

관련 정보