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?

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.


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}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.