首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算一行第一个空格之前/之后的字符数?

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

Unix & Linux用户
提问于 2019-06-20 19:50:16
回答 2查看 379关注 0票数 1

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

N=第一个空格后的字符数是7个(一个兔子),所以我想出了一个方法。也就是说,计算第一个空格之前的字符数和空格本身= P,然后N=行的长度-P=11-4=7( "Iam“的长度为4)

代码语言:javascript
运行
复制
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 
代码语言:javascript
运行
复制
count_length_of_line() {
string=$1
count=$(echo "$string" | wc -c)
}
代码语言:javascript
运行
复制
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 (这是错误的)。有谁可以帮我?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-06-20 19:56:40

如果变量包含字符串:

代码语言:javascript
运行
复制
str="Iam a bunny"

它可能很简单,如:

代码语言:javascript
运行
复制
$ before="${str%% *} "; after=${str#* }
$ echo "\"$before\"=${#before} \"$after\"=${#after}"
"Iam "=4 "a bunny"=7
票数 0
EN

Unix & Linux用户

发布于 2019-06-20 23:26:01

您可以从这里的字符串中将read放入多个变量:

代码语言:javascript
运行
复制
$ str="Iam a bunny"
$ read -r first rest <<<"$str"
$ echo "${#first} ${#rest}"
3 7

如果需要,可以向first+=" "这样的第一个位置添加一个空格。

此技术将不包含单词之间的多个空格。

也许一个更健壮的技术是一个正则表达式:

代码语言:javascript
运行
复制
$ if [[ $str =~ ([^[:blank:]]+[[:blank:]]+)(.*) ]]; then
    first=${BASH_REMATCH[1]} rest=${BASH_REMATCH[2]}
  fi
$ echo "${#first} ${#rest}"
4 7
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/526117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档