如何计算行中第一个空格之前/之后的字符?

如何计算行中第一个空格之前/之后的字符?

我想计算第一个空格之后的字符数。例如,该行可能是这样的: 我是一只兔子

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() 返回 length+1 (这是错误的)。谁能帮我?

答案1

您可以read从此处字符串输入多个变量:

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

first+=" "如果需要,您可以在第一个 like 中添加一个空格。

该技术将不适应多种的单词之间有空格。

也许更强大的技术是正则表达式:

$ 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

相关内容