
Als ich diesen Befehl unter Red Hat Linux verwendet habe
/usr/sbin/ss -i
Ich erhalte die folgende Ausgabe:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 <IP_ADD:PORT> <IP_ADD:PORT>
ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3
ESTAB 0 0 <IP_ADD:PORT> <IP_ADD:PORT>
ts sack wscale:2,2 rto:213 rtt:13.875/18.5 ato:40
ESTAB 0 0 <IP_ADD:PORT> <IP_ADD:PORT>
ts sack wscale:2,2 rto:201 rtt:1.875/0.75 ato:40
ESTAB 0 0 <IP_ADD:PORT> <IP_ADD:PORT>
ts sack wscale:9,2 rto:201 rtt:1.875/0.75 ato:40
Immer wenn ich versuche, eine Pipe grep
an diesen Befehl weiterzuleiten ex
:
/usr/sbin/ss -i | grep <SOME_IP_ADD>
Ich habe diese Ausgabe
ESTAB 0 0 <IP_ADD:PORT> <IP_ADD:PORT>
ESTAB 0 0 <IP_ADD:PORT> <IP_ADD:PORT>
ESTAB 0 0 <IP_ADD:PORT> <IP_ADD:PORT>
Beachten Sie, dass grep dies nicht eingeschlossen hat:
ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3
weil es in einer anderen Zeile steht. Wie passe ich also die Spaltenbreite an, wenn ich diesen Befehl oder andere Linux-Befehle verwende? Damit die Ausgabe nicht umbricht oder in die nächste Zeile springt? Gibt es bessere Möglichkeiten, dies zu tun?
Antwort1
Wenn Ihr Grep es hat, versuchen Sie die -A1
Option.
Es sieht so aus, als ob es sich nicht um einen Umbruch handelt, sondern dass der Eintrag in einer separaten Zeile steht.
/usr/sbin/ss -i | grep -A1 <SOME_IP_ADD>
Schauen Sie sich Context Line Control
in an man grep
.
Eine Alternative wäre die Verwendung
-P Perl-regex
-z suppress-newline
-o print only matching
wie in:
ss -i | grep -Pzo '.*IPADDRESS.*\n.*'
Dann erhalten Sie nicht die umgebenden Striche, die der Kontext liefert.
Eine Alternative könnte sed sein:
sed -n '/IPADDRESS/{N;p}'
# Or joining the two lines by:
ss -i | sed -n '/IPADDRESS/N;s/\n/ /p'
awk:
awk '/IPADDRESS/{print; getline; print}'
# Or as joined lines:
awk '/IPADDRESS/{printf "%s ", $0; getline; print}'
Antwort2
Die ts sack ...
Zeile wird unterhalb der ESTAB ...
Zeile platziert, da ss
diese Art von Informationen immer so formatiert wird. Sie wird nicht umbrochen. Sie können beide Zeilen einschließen, grep
indem Sie das -A1
Flag verwenden:
ss -i | grep <IP ADDRESS> -A1
Sie können alle Übereinstimmungen in einer Zeile zusammenfassen, indem Sie sie durch einen sed
Befehl übergeben:
ss -i | grep <IP ADDRESS> -A1 | sed '/^--$/d;N;s/\n/ /g'