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

Cyb*_*beX 9 linux bash

大家好

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

在我看过的几种方法中,这似乎最简单也最容易理解,但这只是挂起(两者)

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

awk '{print match($t, "$searchstring")}' 
Run Code Online (Sandbox Code Playgroud)

原始帖子 - 帖子 #3

  • t ="MULTI: xyz/xxxx 的主要虚拟 IP:44595: 10.0.0.12"

  • 搜索字符串 ="IP 为"

有什么建议?

cho*_*oba 14

使用参数扩展:

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} ))
Run Code Online (Sandbox Code Playgroud)

$rest$searchstring之后包含 $t 的部分。因此子字符串的起始位置是整个字符串的长度减去 $rest 的长度减去 $searchstring 本身的长度。

  • `$t` 是一个 shell 变量,没有用单引号扩展,awk 不能访问。 (2认同)

小智 5

更好且适合更多情况(考虑“#”与“##”以及具有多个“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}
Run Code Online (Sandbox Code Playgroud)