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