패턴의 점을 포함한 Grep 전체 이름

패턴의 점을 포함한 Grep 전체 이름

나는 완전한 단어를 grep하고 싶습니다.

내가 파일을 가지고 있는 것처럼test.txt

파일의 데이터:

Abc  ABC.xyz abc ABC.xyz 
Def  DEF.mno def DEF.mno

내가 사용할 때 grep -o내 출력은 다음과 같습니다.

grep -o "\w*ABC\w*" test.txt

산출:ABC

나는 완전한 단어를 원한다ABC.xyz

답변1

문제는 이것이 \w"단어 문자"( [a-zA-Z0-9_]) 를 의미하며 .결코 단어의 일부가 아니라는 것입니다.

 $ echo . | grep '\w'
 $ 

공백이 아닌 공백만 검색할 수 있습니다.

$ echo ABC.xyz | grep '\S*ABC\S*'
ABC.xyz

이는 \S보편적으로 이해되지 않을 수도 있습니다. 구현에서 작동하지 않으면 대신 사용하세요 grep -E.

답변2

awk '/ABC/ { print $NF }' test.txt

awk이는 문자열을 ABC각 줄의 내용과 일치시키는 데 사용됩니다 . 줄이 일치하면 공백으로 구분된 마지막 단어를 출력합니다.

행의 첫 번째 필드와 일치시키려면 $1 ~ /Abc/대신 를 사용하십시오 /ABC/. 첫 번째 필드와 문자열 비교를 수행하려면 를 사용하십시오 $1 == "Abc".

명령줄에서 비교할 문자열을 전달하려면 다음을 사용하세요.

awk -v str="Abc" '$1 == str { print $NF }' test.txt

명령줄에서 비교하는 패턴을 전달하려면 다음을 사용하세요.

awk -v pat="ABC" '$1 ~ pat { print $NF }' test.txt

전체 라인과 비교 $1하도록 변경합니다 .$0


자신만의 방법을 사용 grep하고 파일 이름 접미사(있는 경우)를 모른다고 가정하고 GNU를 사용하십시오 grep.

grep -o '\<ABC\.\w*\>' test.txt

\<단어의 시작 과 일치 하고 \>단어의 끝과 일치합니다.

이것이 당신에게 줄 것입니다 ABC.txt그러나 첫 번째 줄에 두 번 나타나기 때문입니다.

GNU가 아닌 구현의 경우 대신 grep사용할 수 있습니다 (GNU에서도 작동함 ).[_[:alnum:]]\wgrep

관련 정보