문자열 입력에서 대문자와 소문자의 수를 계산하는 쉘 스크립트

문자열 입력에서 대문자와 소문자의 수를 계산하는 쉘 스크립트

ASCII 값을 사용하여 문자열의 대문자와 소문자 수를 찾으려면 쉘 스크립트를 사용하는 것이 좋습니다.

답변1

perl -Mopen=locale -e '
  $_="@ARGV";
  printf "upper: %d\nlower: %d\n", y/A-Z//, y/a-z//' -- "$myvar"

ABCDEFGHIJKLMNOPQRSTUVWXYZ 및 abcdefghijklmnopqrstuvwxyz 문자의 발생 횟수가 인쇄됩니다 $myvar.

그리고 zsh:

printf 'upper: %d\nlower: %d\n' ${#myvar//[^A-Z]} ${#myvar//[^a-z]}

또는 :kshbash

upper=ABCDEFGHIJKMLNOPQRSTUVWXYZ
lower=abcdefghijklmnopqrstuvwxyz
u=${myvar//[^$upper]} l=${myvar//[^$lower]}
printf 'upper: %d\nlower: %d\n' "${#u}" "${#l}"

POSIX적으로:

upper=ABCDEFGHIJKMLNOPQRSTUVWXYZ
lower=abcdefghijklmnopqrstuvwxyz
u=$(printf %s "$myvar" | tr -cd "$upper" | wc -m)
l=$(printf %s "$myvar" | tr -cd "$lower" | wc -m)
printf 'upper: %d\nlower: %d\n' "$u" "$l"

그러나 GNU와 같은 일부 tr구현은 tr호환되지 않으며 ASCII 문자와 동일한 인코딩을 갖는 문자 부분을 계산할 수 있습니다. 예를 들어 zh_HK.big5hkscsGNU 시스템의 로케일에서는 다음과 같습니다.

$ LC_ALL=zh_HK.big5hkscs luit
$ printf Э | tr -cd ABCDEFGHIJKLMNOPQRSTUVWXYZ | wc -c
1

의 인코딩에는 Э다음의 인코딩이 정확히 포함됩니다 R.

$ printf Э | hd
00000000  c8 52                                             |.R|
00000002

답변2

암소 비슷한 일종의 영양awk해결책:

s="Kyiv is the city of Archistratigus Michael ..."
awk 'BEGIN{ FPAT="[a-zA-Z]"; l=u=0 }
     {
         for (i=1; i<=NF; i++) ($i~/[a-z]/)? l++ : u++; 
         printf "upper: %d, lower: %d\n", l, u 
     }' <<<"$s"

산출:

upper: 33, lower: 3

  • FPAT="[a-zA-Z]"- 필드 값의 패턴을 정의합니다. (대문자와 소문자만 고려됩니다.)

답변3

사용할 수 있는 문자 수를 계산하려면grep그리고 간단한 정규식과 함께;그리고화장실

myVar="Valdeir Psr"
echo -n $myVar | grep -o [A-Z] | tr -d "\n" | wc -m

각 명령의 기능은 다음과 같습니다.

echo -n -->변수 값을 출력합니다.

grep -o [A-Z] --> 대문자 필터링

tr -d "\n" --> 개행 문자 제거

wc -m --> 문자 수를 출력합니다.

소문자를 계산하려면 [A-Z]다음으로 바꾸십시오.[a-z]

답변4

문자열의 소문자 수를 계산합니다.

for i in {a..z}; do
  echo "Praven" | awk -v i="$i" '$1~i {print i}';
done | wc -l

산출

5

대문자를 찾으려면 a..z로 바꾸십시오 A..Z.

관련 정보