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

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

주변 단어와 일치하는 단어를 찾고 싶습니다.나는 또한 그것이 더 빠르기를 바랍니다.

이것이 내가 얻는 것입니다:

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에서 "I"라는 단어 검색).

"잡았어" 부분http://www.regular-expressions.info/examples.html정규식이 느린 이유에 대한 좋은 지침이 있습니다.

관련 정보