如何计算以下行中S1,
和//
之间(16)的空格数:
S1, // name
答案 0 :(得分:4)
一种方式:
awk -F '//' '{ n = gsub(/ /, "", $1); print n }'
测试:
echo 'S1, // name' | awk -F '//' '{ n = gsub(/ /, "", $1); print n }'
结果:
16
答案 1 :(得分:2)
如果您真的想要awk
,那么您可以构建以下内容。
$ echo "S1, // name" | awk '{x=gsub(/ /," ",$0); print x}'
17
gsub
返回所做的替换次数。显然,这个正则表达式也会找到并计算其他空间,但你明白了。
或尝试这样的事情:
echo "S1, // name" |
awk -F[,/] ' { for (i=1;i<=NF;i++) print "$"i " is \""$i"\" of length, " length($i);}'
$ echo "S1, // name" | awk -F[,/] ' { for (i=1;i<=NF;i++) print "$"i " is \""$i"\" of length, " length($i);}'
$1 is "S1" of length, 2
$2 is " " of length, 16
$3 is "" of length, 0
$4 is " name" of length, 5
答案 2 :(得分:1)
仅使用S1,
计算//
和awk
之间的所有空格:
$ echo 'S1, // name' | awk -F'[,/]' '{print length($2)}'
16
或基于fedorqui评论的方法:
$ echo 'S1, // name' | grep -Po '(?<=S1,) *(?=//)' | wc -L
16
答案 3 :(得分:0)
Pure bash
x='S1, // name'
x=${x#S1,}
x=${x%//*}
echo ${#x}
16