Das Extrahieren von Text mit sed funktioniert nicht wie erwartet

Das Extrahieren von Text mit sed funktioniert nicht wie erwartet

Ich bin gerade erst mit der Nutzung von .NET begonnen sedund möchte damit IP-Adressen aus pingder Ausgabe extrahieren. Genau das versuche ich zu erreichen:

Eingabetext:

ytmti (192.188.2.3) jjggy

gewünschte Ausgabe:

192.188.2.3

Befehl, den ich versuche:

echo "ytmti (192.188.2.3) jjggy" | sed 's:\((\(192.188.2.3\))\):\2:' 

aktueller Output:

ytmti 192.188.2.3 jjggy

Hinweis: ytmtiund jjggysind eigentlich Platzhalter für Text wie Pinging unix.stackexchange.comund with 32 bytes of data:.

Ich denke, dass die Verwendung awkeine bessere Lösung zum Parsen der Ausgabe sein könnte ping, aber ich möchte mich daran gewöhnen sed.

Antwort1

Der Ersetzungsbefehl ersetzt alle im ersten Abschnitt übereinstimmenden Zeichen durch alle Zeichen des zweiten Abschnitts, sodass Sie nur den zu speichernden Teil oder etwas Ähnliches sedbenötigen und gruppieren müssen, etwa:.*

echo " ytmti (192.188.2.3) jjggy" | sed 's:^.*(\([^)]*\).*$:\1:'

Beachten Sie, dass ich [^)]*dies verwende, um die Festcodierung der IP zu vermeiden und sie für alle zu verallgemeinern. Es ergibt:

192.188.2.3

Antwort2

Verwenden der Feldtrennvariable in awk:

echo "ytmti (192.188.2.3) jjggy" | awk -F'[)(]' '{print $2}'                                                                                              
192.188.2.3

Antwort3

Sie können auch Folgendes tun:

echo 'ytmti (192.188.2.3) jjggy' | tr -dc '0-9.'

verwandte Informationen