本节分享的内容为:
在shell编程中,计算字符串的长度,即所有字符的个数,并简单介绍几种求字符串中指定字符个数的方法。
示例:
// 计算某个字符串的长度,即所有字符的个数
$ var="get the length of me"
$ echo ${var} # 这里等同于$var
get the length of me
$ echo ${#var}
20
$ expr length "$var"
20
$ echo $var | linuxjishu/13830.html target=_blank class=infotextkey>awk '{printf("%dn", length($0));}'
20
$ echo -n $var | wc -c
20
// 计算某些指定一个字符或者多个字符的个数
$ echo $var | tr -cd g | wc -c
2
$ echo -n $var | sed -e 's/[^g]//g' | wc -c
2
$ echo -n $var | sed -e 's/[^gt]//g' | wc -c
5
// 如果要统计单词个数,更多相关信息见《shell编程之数值计算》之 _单词统计_ 实例。
$ echo $var | wc -w
5
$ echo "$var" | tr " " "n" | grep get | uniq -c
1
$ echo "$var" | tr " " "n" | grep get | wc -l
1
stringZ=abcABC123ABCabc
echo `expr "$stringZ" : '.*'` # 15
说明:
${}操作符在Bash里头一个“大牛”,能胜任相当多的工作,具体就看看网中人的《shell十三问》之《Shell十三问》之"$(( )) 與 $( ) 還有${ } 差在哪?" 吧。
在一个文本文件的段落之间插入空行:
#!/bin/bash
# paragraph-space.sh
# 在一个单倍行距的文本文件中插入空行.
# Usage: $0 <FILENAME
MINLEN=45 # 可能需要修改这个值.
# 假定行的长度小于$MINLEN所指定的长度的时候
#+ 才认为此段结束.
while read line # 提供和输入文件一样多的行...
do
echo "$line" # 输入所读入的行本身.
len=${#line}
if [ "$len" -lt "$MINLEN" ]
then echo # 在短行(译者注: 也就是小于$MINLEN个字符的行)后面添加一个空行.
fi
done
exit 0
索引:
expr index $string $substring
在字符串$string中所匹配到的$substring第一次所出现的位置.
stringZ=abcABC123ABCabc
echo `expr index "$stringZ" C12` # 6
# C 字符的位置.
echo `expr index "$stringZ" 1c` # 3
# 'c' (in #3 position) matches before '1'.
这种方法与C语言中的strchr()函数很相似。