[unix] 전체 단어를 grep하는 방법

다음 명령을 사용하여 하위 디렉토리에서 물건을 grep합니다.

find . | xargs grep -s 's:text'

그러나 이것은 또한 다음과 같은 것을 찾습니다. <s:textfield name="sdfsf"...../>

그것을 피하기 위해 무엇을 할 수 있습니까? <s:text name="sdfsdf"/>

또는 그 문제에 대해 …. 또한 찾습니다 <s:text somethingElse="lkjkj" name="lkkj"

기본적 s:textname같은 줄에 있어야합니다 ….



답변

-w단어의 끝임을 지정하는 옵션을 원합니다 .

find . | xargs grep -sw 's:text'


답변

\b“단어 경계”에서 일치하는 데 사용 하면 전체 단어에 대해서만 검색이 일치합니다.

그래서 당신의 grep은 다음과 같습니다.

grep -r "\bSTRING\b"

색상과 줄 번호를 추가하는 것도 도움이 될 수 있습니다.

grep --color -rn "\bSTRING\b"

에서 http://www.regular-expressions.info/wordboundaries.html :

단어 경계에 해당하는 세 가지 위치가 있습니다.

  • 첫 번째 문자가 단어 문자 인 경우 문자열의 첫 번째 문자 앞.
  • 문자열의 마지막 문자 뒤, 마지막 문자가 단어 문자 인 경우.
  • 하나는 단어 문자이고 다른 하나는 단어 문자가 아닌 문자열의 두 문자 사이.


답변

xargsgrep 검색을 재귀 적으로 수행 하여 명령을 삭제할 수 있습니다 . 그리고 일반적으로 ‘s’플래그가 필요하지 않습니다. 그 후:

grep -wr 's:text'


답변

rg, https://github.com/BurntSushi/ripgrep 시도해 볼 수 있습니다 .

rg -w 's:text' .

그것을해야한다


답변

나머지 텍스트 부분 만 필터링하려는 경우 이렇게 할 수 있습니다.

xargs grep -s 's:text '

s:text마지막 t 뒤에 공백이있는 인스턴스 만 찾습니다 . s:text이름 요소 만있는 인스턴스 를 찾아야하는 경우 결과를 다른 grep표현식으로 파이프 하거나 정규식을 사용하여 필요한 요소 만 필터링하십시오.


답변