Ich bin gerade erst mit der Nutzung von .NET begonnen sed
und möchte damit IP-Adressen aus ping
der 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: ytmti
und jjggy
sind eigentlich Platzhalter für Text wie Pinging unix.stackexchange.com
und with 32 bytes of data:
.
Ich denke, dass die Verwendung awk
eine 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 sed
benö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.'