bash-查找子字符串的字符串索引位置

bash-查找子字符串的字符串索引位置

大家好

我看不到我的错误,我想在字符串“t”中找到子字符串“searchstring”的位置

在我研究过的几种方法中,这似乎是最简单、最容易理解的,然而这只是挂起(两者)

awk 'match($t, "$searchstring")'

awk '{print match($t, "$searchstring")}' 

原始帖子 - 帖子#3

  • 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

相关内容