
Quando usei este comando no Red Hat Linux
/usr/sbin/ss -i
Eu recebo a seguinte saída abaixo:
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
Sempre que tento canalizar grep
para esse comando ex
:
/usr/sbin/ss -i | grep <SOME_IP_ADD>
Eu tenho essa saída
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>
Observe que grep não incluiu isto:
ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3
porque está em outra linha. Então, como ajusto a largura da coluna sempre que uso este comando ou outros comandos do Linux? Para que a saída não seja quebrada ou vá para a próxima linha? São as melhores maneiras de fazer isso?
Responder1
Se o seu grep tiver, tente a -A1
opção.
Parece que não se trata de quebra automática, mas sim de que a entrada está em uma linha separada.
/usr/sbin/ss -i | grep -A1 <SOME_IP_ADD>
Veja Context Line Control
em man grep
.
Uma alternativa seria usar
-P Perl-regex
-z suppress-newline
-o print only matching
como em:
ss -i | grep -Pzo '.*IPADDRESS.*\n.*'
Então você não obterá os traços circundantes fornecidos pelo contexto.
Uma alternativa poderia ser sed:
sed -n '/IPADDRESS/{N;p}'
# Or joining the two lines by:
ss -i | sed -n '/IPADDRESS/N;s/\n/ /p'
estranho:
awk '/IPADDRESS/{print; getline; print}'
# Or as joined lines:
awk '/IPADDRESS/{printf "%s ", $0; getline; print}'
Responder2
A ts sack ...
linha é colocada abaixo da ESTAB ...
linha porque é assim que ss
sempre formata esse tipo de informação. Não está sendo enrolado. Você pode incluir ambas as linhas grep
usando o -A1
sinalizador:
ss -i | grep <IP ADDRESS> -A1
Você pode combinar cada correspondência em uma linha passando-a por um sed
comando:
ss -i | grep <IP ADDRESS> -A1 | sed '/^--$/d;N;s/\n/ /g'