Ich versuche, eine Textdatei zu analysieren, die von einem Erwartungsskript generiert wird, das
einige Informationen von einem Schalter herunterzieht.
Hier ist eine Beispielausgabe:
192 0000.0000.0000 1/g23 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
Die Textdatei enthält viel anderen Müll, der mich nicht interessiert. Ich möchte nur die Zeilen, die die Switch-Nummer und den Port enthalten – „1/g23“ im obigen Beispiel.
Ich habe die Datei mit grep bearbeitet, um die Zeilen zu extrahieren, die das Muster „/g“
enthalten, und es funktioniert hervorragend.
Jetzt will ich nur noch die beiden mittleren Spalten.
Ich habe awk verwendet, um die Spalten zu drucken.
0000.0000.0000 1/g23
Jetzt, wo das erledigt ist, möchte ich das '.' loswerden.
sed hat dafür gut funktioniert
000000000000 1/g23
Von hier aus möchte ich nur die erste Spalte in ein MAC-Adressformat konvertieren.
So this
000000000000 1/g23
Becomes this
00:00:00:00:00:00 1/g23
Ich konnte einen sed-Befehl finden, der dies bewerkstelligen würde. Aber mein Problem ist, dass ich es nur in der ersten Spalte machen muss. Ich bin mir nicht ganz sicher, wie ich nur die eine Spalte bearbeiten kann und die Zuordnung zwischen dem MAC und dem Port nicht verliere.
grep -e "/g" switch6output | awk '{print $2,$3}' | sed 's/.//g' | sed 's/../&:/g;s/:$//'
Ich bin mir sicher, dass dies eine wirklich dumme Art ist, es zu tun, aber es war das Beste, was mir eingefallen ist. Gibt es einen zuverlässigeren Weg, um das zu erreichen, was ich brauche, ohne die MAC- und Portzuordnung zu verlieren?
Danke.
Akzeptierte Antwort:
Verwenden Sie einfach awk direkt:
awk '//g/ {
gsub(/./, "", $2)
gsub(/../, "&:", $2)
sub(/:$/, "", $2)
print $2,$3
}'
Mit dieser Lösung benötigen Sie kein grep
noch sed
.