파일에서 shell이라는 단어가 몇 번이나 사용되었는지 알아내야 합니다. 단어가 몇 번이나 사용되었는지 세어 봤는데 grep "shell" test.txt | wc -w
결과는 3이 아닌 4였습니다. 파일 내용은 다음과 같습니다.
this is a test file
for shell_A
shell_B
sh
shel
and
shell_C
script project
답변1
wc 명령은 "for"를 포함하여 grep 출력의 단어 수를 계산합니다.
> grep shell test.txt
for shell_A
shell_B
shell_C
그래서 실제로 4개의 단어가 있습니다.
특정 단어가 포함된 파일의 줄 수만 계산하려면 -c
grep 옵션을 사용할 수 있습니다. 예를 들어 다음과 같습니다.
grep -c shell test.txt
이 중 어느 것도 실제로 중요하지 않습니다.성격, 그러나 다음을 포함한 다른 콘텐츠와 일치할 수 있습니다.끈. 대부분의 grep
구현(GNU grep, 최신 BSD 및 AIX, HPUX, Solaris)은 -w
단어 옵션을 제공하지만저것POSIX에는 없습니다. 또한 정규식도 인식합니다. 예를 들면 다음과 같습니다.
grep -e '\<shell\>' test.txt
이 -w
옵션에 해당합니다. 다시,저것POSIX에는 없습니다. 과연 솔라리스문서이러한 이유로 AIX 및 HPUX 설명에서는 -w
정규식에 대해 언급하지 않습니다. 이것들은 모두 일관되게 보입니다. "단어"를 밑줄 친 영숫자 문자의 시퀀스로 생각하세요.
grep과 함께 POSIX 정규식을 사용하여 단어(공백 등으로 구분)를 일치시킬 수 있지만 예제 중 어느 것도 단순한 "쉘"이 아닙니다. 모두 일치하는 다른 문자가 있습니다. 또는 영숫자에만 관심이 있는 경우(그리고아니요밑줄) 하위 문자열을 일치시켜도 괜찮습니다.
tr -c '[[:alnum:]]' '\n' test.txt |grep -c shell
제안된 옵션 -o
은 POSIX가 아니며 OP가 질문을 Linux나 BSD로 제한하지 않았기 때문에 권장하는 옵션은 아닙니다. 두 경우 모두 일치하지 않습니다.성격, 하지만끈(이것은 OP의 기대입니다).
참고로:
답변2
"grep" 명령은 "shell"이 나타나는 전체 줄을 출력합니다. 단지 "쉘"이라는 단어가 아닙니다. 다음과 같이:
grep shell test.txt
for shell_A
shell_B
shell_C
이 옵션을 사용하는 것이 좋습니다
-o, --match만 해당
그래서:
grep -o "shell" test.txt | wc -w
답변3
"shell"이라는 단어는 한 줄에 여러 번 나타날 수 있으므로 먼저 텍스트를 한 줄에 한 단어로 나눈 다음 grep을 수행합니다.
< test.txt tr -s "[[:blank:]]" "\n" | grep "shell" | wc -w
을(를) 사용 wc -l
하거나 취소 wc
하고 사용할 수도 있습니다.grep -c "shell"
tr
자신이 소유하고 사용하는 파일이 필요하지 않도록 할 수도 있습니다.
grep -c "쉘" test.txt
답변4
wc -l
이것을 사용해야 합니다 (예: grep shell test.txt | wc -l
3을 반환).