最初のスペースの後の文字数を計算したいと思います。たとえば、行は次のようになります。 私はウサギです
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