考虑字符串
s=pqrPQR456PQRpqr
现在
expr index $s p
给我答案为 1
但是如何找到在 R 之后的 p 的索引或任何重复字符的索引;那是我无法得到的。
您可以根据索引获取子字符串。
$ s=pqrPQR456PQRpqr
$ n=$(expr index $s p)
$ echo "${s:$n}"
qrPQR456PQRpqr
这至少为您提供了您正在搜索的字符之后的字符串。
#!/bin/ksh
ind=`expr index string substring`
count_occ=`echo "$string"|tr -cd $substring|wc -c`
count=1
echo " The $substring occurs at : $ind "
while [ $count -lt $count_ind ]
do
rem_str=${string:$ind}
new_ind=`expr index $rem_str $substring`
count=`expr $count + 1`
ind=`expr $ind + $new_ind`
echo "$ind"
done
这是一个无需调用外部程序(如expr
. 它从零而不是一开始计算位置(零更常用于第一个字符位置)。
# Take two parameters:
# $1 - the string
# $2 - target character
# $3 - the offset, default is 0
function strchr {
typeset -i offset
string="$1"
target="$2"
offset="$3"
(( $# < 3 )) && offset=0
while (( $offset < ${#string} ))
do
char=${string:$offset:1}
[[ $char == $target ]] && break;
(( offset++ ))
done
echo "$offset"
}
s='pqrPQR456PQRpqr'
i=$(strchr "$s" 'p')
echo "i: $i"
j=$(strchr "$s" 'p' $(( $i + 1 )) )
echo "j: $j"
给出:
i: 0
j: 12