grep을 사용하여 정확한 문자열 일치


63

텍스트 파일이 있습니다.

deiauk 1611516 afsdf 765
minkra 18415151 asdsf 4152
linkra sfsfdsfs sdfss 4555
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4
deiauk 1611516 afsdf ddfgfgd
luktol1 4545 4 9
luktol 1

그리고 정확히 일치하고 싶습니다 deiauk. 내가 이것을 할 때 :

grep "deiauk" file.txt

나는이 결과를 얻는다 :

deiauk 1611516 afsdf 765
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4

그러나 나는 이것 만 필요합니다 :

deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

나는 -w옵션 이 있다는 것을 알고 있지만 내 줄은 전체 줄을 마쳐야합니다.


4
실제로 시도 grep -w했습니까? (이 옵션은 정확히 그 목적을위한 것이며 저에게 효과적입니다.)-참고 : 옵션 -x은 전체 줄과 일치합니다.
Janis

"나는 정확히 일치 할deiauk / : 만이 필요" deiauk 1611516 afsdf 765" ? 당신이 필요합니까 -
알렉스

답변:


127

다음 중 하나를 시도하십시오.

grep -w "deiauk" textfile

grep "\<deiauk\>" textfile

3
문자열 끝에 대시 ( - )가있는 경우이 스크립트는 예상치 못한 결과를 가져옵니다.
Evis

올바른 @Evert : 단어에는 알파벳 문자, 숫자 및 밑줄 만 포함되므로 약어 나 다른 항목에 하이픈이 있으면 작동하지 않습니다.
ingyhere

@ Cyrus *단어에 vi / vim 명령 을 사용하면서 두 번째 것을 배웠습니다 .
shuva

예를 들어 org.apache.avro avroGreped org.apache.avro avro+mapred(*로 시도)와 같은 특수 문자에는 작동하지 않습니다.
Vishrant

12

GNU로 이것을 시도 grep하고 단어 경계를 \b다음 과 같이 표시하십시오 .

grep "\bdeiauk\b" file

산출:

deiauk 1611516 afsdf 765

참조 : http://www.regular-expressions.info/wordboundaries.html


고맙지 만 왜 이것이 효과가 없습니까? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
user3334375 2016 년

시도grep "\b${vard}\b" file.txt
Cyrus

1
여전히 작동하지 않습니다 : /
user3334375

당신이 필요합니다 read:read -p "Enter login: " vard; grep "\b${vard}\b" file.txt
사이러스

7

귀하의 경우, grep지원 -P(PCRE)를, 당신이 할 수 있습니다 :

$ grep -P '(^|\s)\Kdeiauk(?=\s|$)' file.txt 
deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

4
이것은 하이픈으로 된 단어와 함께 작동하는 유일한 대답입니다.
ingyhere

5

실제 데이터에 따라 단어 다음에 공백이있을 수 있습니다.

grep 'deiauk ' file.txt 

줄의 시작 부분에 있어야한다는 것을 알고 있다면 다음을 확인하십시오.

grep '^deiauk ' file.txt 

슬프게도, 이것 이외의 모든 대답은 틀 렸습니다.
Shatu

@Shatu 감사합니다! "최상위로 올라 가기"까지 걸리는 시간을 보자 ... 오래된 질문에 대한 답변을 추가하고 싶기 때문에 궁금하다 ... 의심 스럽다. 그것은 나에게 좋을 것이지만 독자들에게는 실제로 유용합니다. 이를 좋은 사례로 만들기 위해 다른 답변이 누락 된 내용을 요약 한 주석을 작성하도록 요청할 수 있습니까?
Volker Siegel

(1) 10K 담당자에게 축하를 전합니다. 이제이 답변이 이전에 주어졌으며 삭제되었음을 확인할 수있는 권한이 있습니다. (2) 말한 내용 에 따라 가능한 한 광범위하게 질문 에 대답하고 샘플 데이터에만 적합한 대답을 제공하지 않는 것이 좋습니다. 질문의 예제 데이터에서 열이 공백으로 구분되어 있지만 지정되지 않은 것 같습니다. 다른 모든 답변은 탭으로 구분 된 열에도 적용됩니다. (3) 타 코미의 (삭제 된) 답변에서 치명적인 결함을 피했습니다. ^그러나 다른 모든 답변은 효과가 있습니다 ... (계속)
G-Man

(계속)… 문자열이 첫 번째 필드 이외의 필드에 나타나는 경우. (4) 또한``deiauk ''가 마지막 필드이면 다른 모든 대답이 작동합니다 (즉, 그 뒤에 아무것도 없음).
G-Man
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.