if [[ $val =~ ^(.{5}.*?)(hi) ]]
then
echo "match found"
prefix_len=`echo -n ${BASH_REMATCH[1]} | wc -m`
echo "$prefix_len"
else
echo "match not found"
fi
更具体地说,
[[ $val =~ ^.{5}.*hi ]]
# |^^^ ^^-->string you want to search for
# | | |
# | | any characters(including zero character)
# | |
# | any 5 characters
# |
# start of line
val=(hi hello hi yes no hi good hi)
for i in $( seq 0 $( expr ${#val[@]} - 1 ) ) ; do [ ${val[${i}]} == "hi" ] && echo "'hi' is at position: ${i}"; done
5条答案
按热度按时间umuewwlo1#
您可以使用
${val#?????}
来去除前五个字符,并使用简单的case
来检查匹配。z9smfwbn2#
要获取是否匹配,如果匹配,则获取搜索字符串的位置。然后,您可以提取您想要的任何内容。
更具体地说,
有关bash中regex的更多信息:http://tldp.org/LDP/abs/html/x17129.html
nnsrf1az3#
或
azpvetkf4#
在字符串
$val
中从索引5开始搜索模式iqih9akk5#
试试这个...
这是一个使用数组来分配所有字符串的解决方案,使用for命令将每个位置与字符串“hi”进行比较