전체 단어를 grep하는 방법


82

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

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

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

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

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

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


29
제목을 " 전세계를 위한 grep하는 방법"이라고 읽은 사람이 있습니까?
Earlz

14
@Earlz, 아니, 주로 내가 "grep 전체 단어"를 검색했기 때문에.
Luke

답변:


99

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

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


66

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

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

grep -r "\bSTRING\b"

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

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

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

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

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

28

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

grep -wr 's:text' 

1

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

rg -w 's:text' . 

그것을해야한다


이 링크가 질문에 답할 수 있지만 여기에 답변의 필수 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 무효화 될 수 있습니다. - 리뷰에서
Jibin Balachandran

3
나는 대답을 제공했다 : rg -w 's : text'.
ms4720

1
비표준 도구를 제안하는 다른 이유가있을 수 있지만 표준 grep으로이 문제를 해결하는 방법에 대한 질문에 대한 해결책으로서 , 특히 grep동일한 옵션이있는 경우 특히 강력하거나 만족스럽지 않습니다 .
tripleee

그것은 얼마나 깊은 지방 directi에 따라 달라집니다
ms4720

파일 수에 따라 다르며 ripgrep은 훨씬 더 빠를 수 있으며 find-> xargs는 각 파일에 대해 새 프로세스를 만듭니다.
ms4720

0

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

xargs grep -s 's:text '

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


"텍스트"가 출력 끝에 있으면 어떻게됩니까? 솔루션에서 건너 뛰지 않습니까?
pkuszewski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.