大家好
我看不到我的错误,我想在字符串“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