1

всем хорошего дня

Я не могу увидеть свою ошибку, я хотел бы найти положение подстроки "searchstring" в строке "t"

из нескольких методов, которые я рассмотрел, это кажется самым простым и понятным, однако это просто зависает (оба)

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

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

оригинальный пост - пост № 3

  • t = "MULTI: первичный виртуальный IP-адрес для xyz/ xxxx: 44595: 10.0.0.12"

  • searchstring = "IP для"

какие-либо предложения?

2 ответа2

3

Используйте расширение параметра:

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.

1

Еще лучше и подходит для большего количества случаев (рассмотрим «#» против «##» и наличие более одного экземпляра «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}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .