【问题标题】:Counting symbols without spaces in bash在bash中计算没有空格的符号
【发布时间】:2018-03-26 06:49:15
【问题描述】:

我想创建一个脚本,该脚本将从字符串“word blah-blah word one more time word again”中计算符号。它只会在“word”之前计算符号,并且每个“word”都应该写入新字符串。所以脚本的输出应该是这样的:

word 0 ## (no symbols)
word 9 ##blah-blah
word 11 ##one more time

我在这一刻得到的一切:

#!/bin/bash
$word="word blah-blah word one more time word again"
echo "$word" | grep -o word

输出只显示 $word 中的“单词”。我如何计算“单词”之前的字符?

【问题讨论】:

  • 你的意思是计算字符数?使用awk 执行此操作。将记录分隔符设置为word,然后打印length($0)

标签: bash count wc


【解决方案1】:

bashsolution:

word="word blah-blah word one more time word again"
c=0
for w in $word;do
  [[ $w != "word" ]] && (( c+= ${#w} )) && continue
  echo $w $c
  c=0
done

来自bash男人

${#parameter}

参数长度。替换参数值的字符长度。如果 parameter 是 * 或 @,则替换的值是位置参数的数量。如果 parameter 是一个以 * 或 @ 为下标的数组名,则替换的值是数组中的元素个数。

说明

for w in $word;do:用于将word字符串用空格作为分隔符分割成单个单词变量:w

[[ $w != "word" ]] && (( c+= ${#w} )) && continue:如果w 不是word,则将当前字符串(${#w})中的字符数存储到c 计数器中,然后继续下一个单词(continue),无需进一步处理。

当字面量word成立时,只需打印计数器的值并初始化它(c=0

结果

word 0
word 9
word 11

【讨论】:

  • 谢谢。你能解释一下这段代码 (( c+= ${#w} )) 如何计算没有空格的符号吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多