나는 완전한 단어를 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:]]
\w
grep