쉘에서 문자열의 단어 수를 계산하고 싶습니다. 쉘을 사용하여 문자열에서 단어 수를 계산하는 방법
은 문자열입니다 가정 :input="Count from this String"
여기에 구분 기호 공간 ' '
과 예상 출력은 4 도 "Count from this String "
같은 입력 문자열에 공백 문자를 후행가있을 수 있습니다.
문자열에 후행 공백이 있으면 동일한 출력 4를 생성해야합니다. 어떻게해야합니까?
쉘에서 문자열의 단어 수를 계산하고 싶습니다. 쉘을 사용하여 문자열에서 단어 수를 계산하는 방법
은 문자열입니다 가정 :input="Count from this String"
여기에 구분 기호 공간 ' '
과 예상 출력은 4 도 "Count from this String "
같은 입력 문자열에 공백 문자를 후행가있을 수 있습니다.
문자열에 후행 공백이 있으면 동일한 출력 4를 생성해야합니다. 어떻게해야합니까?
echo "$input" | wc -w
단어의 수를 계산하려면 wc -w를 사용하십시오.
또는 개정 향풀의 제안에 따라
는, 에코도 제거 가지고 할 수 있습니다wc -w <<< "$input"
경우 < < <는 쉘에서 지원하지 않는이 변형 시도 할 수 있습니다 :
wc -w << END_OF_INPUT
$input
END_OF_INPUT
을 wc
과 같은 외부 명령은 더 효율적이기 때문에 순수 bash
에서 수행 할 수 있기 때문에 필요하지 않습니다.
문자열을 배열로 변환하고 배열 요소 수 :
$ input="Count from this String "
$ words=($input)
$ echo ${#words[@]}
4
대안
는 다음 위치 매개 변수를 설정하고 set
를 사용하여 그들을 계수 :
$ input="Count from this String "
$ set -- $input
$ echo $#
4
두 번째 변형은 명령 줄에서받은 매개 변수 나 함수에 전달 된 매개 변수와 같은 위치 매개 변수를 덮어 쓰는 부작용이 있습니다 (이러한 행이 함수 내에있는 경우). 그래서 $ 1, $ 2 등에 의존하지 말고, set - $ input을 사용하십시오. – Tuxdude
@Tuxdude 매우 중요했습니다. 감사합니다 –
@ 도그 뱅 당신이 제안한 두 번째 해결책은 제게 잘 작동하고 있지만 Tuxdude가 지적했듯이 현재 매개 변수를 새 매개 변수로 바꿀 수는 없으므로 현재 흐름을 깨뜨릴 수 있습니다. 나는 첫 번째 해결책을 구현하려고 시도했지만 불행히도 오류가 발생했다. ** 구문 오류 : 개행을 기대한다. ** –
가 그것을 위해서는 부작용을 피할 수있는 순수한 bash는 다음과 같습니다.
$ input="Count from this string "
$ echo $(IFS=' '; set -f; set -- $input; echo $#)
4
그것은뿐만 아니라 다른 구분와 함께 작동 :
$ input="dog,cat,snake,billy goat,horse"
$ echo $(IFS=,; set -f; set -- $input; echo $#)
5
$ echo $(IFS=' '; set -f; set -- $input; echo $#)
2
참고 발신자가 확장이가 (모자 팁 @의 mkelement0) 사전에 수행해야 원하는, 그래서 만약 서브 쉘에서 bash filename expansion을 비활성화 "-f 설정"의 사용. 그것은 기본적 c()
함수를 정의하고, 인수로 공백으로 구분 인자의 요소 $#
반환 번호 $input
전달
echo $(c() { echo $#; }; c $input)
:
멋지게 끝났으며 각'set' 명령 앞에'set -f;'를 추가하는 것이 좋다. (예 : _separate_ 명령)을 사용하여 경로명 확장을 (일시적으로) 비활성화 할 수 있습니다. 이것은'*'와 같은 입력 토큰이 우발적으로 확장되지 않도록 보장합니다 .. – mklement0
는 다음의 한 줄을보십시오. 구분 기호를 변경하려면 IFS
(특수 변수)을 변경할 수 있습니다.
난 그냥 펄 한 줄 ('에코의 불필요한 사용을'피)에 차임 있습니다 :
perl -lane 'print scalar(@F)' <<< $input
왜 downvote 질문? 또는 누군가가 무언가를 모르고 다른 사람들이 그것을 안다면, 그들은 단순히 downvote 할 수 있다는 것을 의미합니까? –