줄의 첫 번째 공백 앞/뒤의 문자 수를 어떻게 계산합니까?

줄의 첫 번째 공백 앞/뒤의 문자 수를 어떻게 계산합니까?

첫 번째 공백 이후의 문자 수를 계산하고 싶습니다. 예를 들어 줄은 다음과 같습니다. 나는 토끼입니다

N = 첫 번째 공백 뒤의 문자 수가 7(토끼)이므로 방법을 알아냈습니다. 즉, 첫 번째 공백 앞의 문자 수와 공백 자체 = P를 계산합니다. 그러면 N = 줄 길이 - P = 11 - 4 = 7("Iam"의 길이는 4입니다)

count_first_part() {
line=$1
count=0
echo "$1" | grep -o . >file1.txt
while read -r linee; do
  if [[ "$linee" != [^[:space:]] ]]; then
  ((count++))
  else
    ((count++))
    break
  fi

done <file1.txt
echo "$count" } 
count_length_of_line() {
string=$1
count=$(echo "$string" | wc -c)
}
p=$(count_first_part "Iam a bunny") 
l=$(count_length_of_line "Iam a bunny")
n=$l-$p
echo "$n"

그러나 count_first_part() 함수는 1을 반환하고, count_length_of_line()은 길이+1을 반환합니다(이것은 잘못된 것입니다). 누가 날 도울 수 있죠?

답변1

read이 문자열에서 여러 변수를 입력 할 수 있습니다 .

$ str="Iam a bunny"
$ read -r first rest <<<"$str"
$ echo "${#first} ${#rest}"
3 7

first+=" "필요한 경우 첫 번째 좋아요에 공백을 추가할 수 있습니다.

기술이 적응하지 못할 것이다많은 종류의단어 사이에는 공백이 있습니다.

아마도 더 강력한 기술은 정규식일 것입니다.

$ if [[ $str =~ ([^[:blank:]]+[[:blank:]]+)(.*) ]]; then
    first=${BASH_REMATCH[1]} rest=${BASH_REMATCH[2]}
  fi
$ echo "${#first} ${#rest}"
4 7

답변2

변수에 문자열이 포함된 경우:

str="Iam a bunny"

다음과 같이 간단할 수 있습니다.

$ before="${str%% *} "; after=${str#* }
$ echo "\"$before\"=${#before} \"$after\"=${#after}"
"Iam "=4 "a bunny"=7

관련 정보