일치하는 단어를 정확하게 가져오기

일치하는 단어를 정확하게 가져오기

몇 가지 질문을 찾아봤지만 내 질문에 만족스럽게 대답하지 못했습니다.

단어가 포함된 줄이 아니라 패턴과 정확히 일치하는 단어를 인쇄해야 합니다. 예를 들어:

난 집에 갈거야. 마음가는 곳이 집입니다.

따라서 "home" 패턴으로 검색하면

홈홈페이지

나는 이해 grep -o 내 일이 더 쉬워지겠지만, 내 거 grep 이 옵션은 지원되지 않습니다. 그래서 다른 해결책이 필요합니다.

또한 정확한 일치가 필요합니다. 따라서 단어가 있으면 homeless선택 항목에서 선택하면 안 됩니다.

답변1

함께 플레이할 사람 perl:

$ echo 'I am going home. Home is where heart is.' | 
    perl -lne 'for (split /\W+/) {print $& if /\bhome\b/i}'

더 짧게 조정됨조셉 R.아래 댓글 (그에게 감사드립니다)

$ echo 'I am going home. Home is where heart is.' | 
    perl -lne 'print $& while /\bhome\b/ig'

결과:

home
Home

답변2

당신은 그것을 사용할 수 있습니다tr단어 구분 기호를 정규화한 다음grep일치하는 단어를 인쇄합니다( -Fx정확한 일치 문자열 및 -i대소문자 구분 옵션 사용).

tr -cs A-Za-z \\n | grep -Fxi home

ASCII가 아닌 로케일을 사용하는 경우 많은 구현이 tr문자가 아닌 바이트로 작동한다는 점에 유의하세요. sed와 같은 다른 도구를 사용하여 단어 구분 기호 정규화를 수행합니다.

sed 's/[^[:alpha:]][^[:alpha:]]*/\n/g' | grep -Fxi home

이 답변의 모든 명령은 POSIX 표준입니다.

답변3

사용 awk:

echo "I am going home. Home is where heart is. I dont like Homework." | awk '{for(i=1;i<=NF;i++) {gsub(/[^a-zA-Z0-9]/,"",$i); if(match(tolower($i),/^(home)$/))print $i;}}'

산출:

home.
Home

답변4

printf %s\\n 'I am going home. Home is where the heart is.' | 
sed 's/\([hH]ome\)*.\{,1\}/\1/g'

산출

홈홈페이지

관련 정보