从逗号分隔的值获取字数时忽略空格

时间:2018-07-13 21:02:57

标签: bash shell

这是我的字符串的样子:

value="inst1,inst2,inst3"

这是我的shell命令的样子,它将计算以逗号分隔的单词数。

echo "$value" | tr ',' ' ' | wc -w
3

只要值中没有空格,此方法就可以正常工作。如果我在值中的一个单词上添加空格,则计数会发生变化。

value="inst1,inst2,inst 3"
echo "$value" | tr ',' ' ' | wc -w
4

如何获取输出3并忽略字符串中的任何空格?

5 个答案:

答案 0 :(得分:4)

您可以使用以下单个awk命令,该命令使用逗号分隔字段:

value="inst1,inst2,inst 3"
awk -F, '{print NF}' <<< "$value"

3

还有一种使用grep的替代解决方案:

grep -oE '[^,]+' <<< "$value" | wc -l

答案 1 :(得分:4)

将单词存储在数组中并输出元素数:

IFS=, read -ra arr <<< "$value"; echo "${#arr[@]}"

答案 2 :(得分:2)

首先用其他方式替换空间,然后再执行您的操作。像这样:

echo "$value" | tr ' ' '_' | tr ',' ' ' | wc -w

答案 3 :(得分:2)

您可以使用sed 's/ //g'删除字符串中的任何空格。因此,完整的命令应为:

echo "$value" | sed 's/ //g' | tr ',' ' ' | wc -w

答案 4 :(得分:1)

使用bash
在值的末尾添加逗号,删除每个非逗号并获得长度。

cnt="${value//[^,]/},";echo "${#cnt}"