So passen Sie die Spaltenbreite in der Linux-Befehlsausgabe an

So passen Sie die Spaltenbreite in der Linux-Befehlsausgabe an

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 grepan 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 -A1Option.

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 Controlin 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 ssdiese Art von Informationen immer so formatiert wird. Sie wird nicht umbrochen. Sie können beide Zeilen einschließen, grepindem Sie das -A1Flag verwenden:

ss -i | grep <IP ADDRESS> -A1

Sie können alle Übereinstimmungen in einer Zeile zusammenfassen, indem Sie sie durch einen sedBefehl übergeben:

ss -i | grep <IP ADDRESS> -A1 | sed '/^--$/d;N;s/\n/ /g'

verwandte Informationen