0

考虑字符串

s=pqrPQR456PQRpqr

现在

expr index $s p

给我答案为 1

但是如何找到在 R 之后的 p 的索引或任何重复字符的索引;那是我无法得到的。

4

3 回答 3

1

您可以根据索引获取子字符串。

$ s=pqrPQR456PQRpqr
$ n=$(expr index $s p)
$ echo "${s:$n}"
qrPQR456PQRpqr

这至少为您提供了您正在搜索的字符之后的字符串。

于 2013-10-23T18:35:46.347 回答
0

#!/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
于 2013-10-26T18:59:48.187 回答
0

这是一个无需调用外部程序(如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
于 2013-10-29T12:39:46.037 回答