![bash-查找子字符串的字符串索引位置](https://linux22.com/image/1473866/bash-%E6%9F%A5%E6%89%BE%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%B4%A2%E5%BC%95%E4%BD%8D%E7%BD%AE.png)
大家好
我看不到我的错误,我想在字符串“t”中找到子字符串“searchstring”的位置
在我研究过的几种方法中,这似乎是最简单、最容易理解的,然而这只是挂起(两者)
awk 'match($t, "$searchstring")'
awk '{print match($t, "$searchstring")}'
t="MULTI: xyz/xxxx:44595 的主要虚拟 IP: 10.0.0.12"
搜索字符串 ="IP 为"
有什么建议么?
答案1
使用参数扩展:
t="MULTI: primary virtual IP for xyz/x.x.x.x:44595: 10.0.0.12"
searchstring="IP for"
rest=${t#*$searchstring}
echo $(( ${#t} - ${#rest} - ${#searchstring} ))
$rest
包含部分$t
后 $searchstring
。因此,子字符串的起始位置是整个字符串的长度减去$rest
减去长度本身$searchstring
。
答案2
甚至更好并且适合更多情况(考虑'#'与'##'并且有多个'IP for'实例)是从匹配字符串中删除到末尾并使用剩余部分的长度。
text="MULTI: primary virtual IP for xyz/x.x.x.x:44595: 10.0.0.12"
search="IP for"
prefix=${text%%$search*}
echo ${#prefix}
答案3
这个怎么样?
t="MULTI: primary virtual IP for xyz/x.x.x.x:44595: 10.0.0.12"
searchstring="IP for"
temp=${t%%$searchstring*} && indexOf=$(echo "${t%%$searchstring*}" | cat ${#temp})
echo "$indexOf"
输出:
23