bash - Findet die Indexposition des Teilstrings

1

Guten Tag allerseits

Ich kann meinen Fehler nicht sehen, ich möchte die Position eines Teilstrings "searchstring" innerhalb des Strings "t" finden

von ein paar Methoden, die ich angeschaut habe, scheint dies am einfachsten und verständlichsten zu sein, dies hängt jedoch nur (beides)

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

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

ursprünglicher Beitrag - Beitrag # 3

  • t MULTI: primäre virtuelle IP für xyz / x.x.x.x: 44595: 10.0.0.12

  • searchstring = "IP für"

irgendwelche Vorschläge?

Cybex
quelle

Antworten:

3

Parametererweiterung verwenden:

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 enthält den Teil von $ t nach dem $ searchstring. Die Startposition des Teilstrings ist daher die Länge des gesamten Strings abzüglich der Länge des $ rest abzüglich der Länge des $ searchstrings.

choroba
quelle
danke, das macht genau das was ich brauche, aber irgendeine idee warum der awk ausdruck nicht funktioniert?
Cybex
$t ist eine Shell-Variable, die nicht in einfache Anführungszeichen gesetzt und awk nicht zugänglich ist.
choroba
1

Noch besser und für mehr Fälle geeignet (siehe '#' gegen '##' und mit mehr als einer Instanz von 'IP for') wäre es, die passende Zeichenfolge bis zum Ende zu entfernen und die verbleibende Länge zu verwenden.

text="MULTI: primary virtual IP for xyz/x.x.x.x:44595: 10.0.0.12"
search="IP for"

prefix=${text%%$search*}
echo ${#prefix}
pourhaus
quelle