몇 가지 질문을 찾아봤지만 내 질문에 만족스럽게 대답하지 못했습니다.
단어가 포함된 줄이 아니라 패턴과 정확히 일치하는 단어를 인쇄해야 합니다. 예를 들어:
난 집에 갈거야. 마음가는 곳이 집입니다.
따라서 "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'
산출
홈홈페이지