
Cuando utilicé este comando en Red Hat Linux
/usr/sbin/ss -i
Obtengo el siguiente resultado a continuación:
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
Cada vez que intento conectarme grep
a ese comando ex
:
/usr/sbin/ss -i | grep <SOME_IP_ADD>
tengo esta salida
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 no incluyó esto:
ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3
porque está en otra línea. Entonces, ¿cómo ajusto el ancho de la columna cada vez que uso este comando u otros comandos de Linux? ¿Para que la salida no se ajuste de palabras ni pase a la siguiente línea? ¿Son sus mejores formas de hacer esto?
Respuesta1
Si tu grep lo tiene, prueba la -A1
opción.
Parece que no se trata de ajustar, sino que la entrada está en una línea separada.
/usr/sbin/ss -i | grep -A1 <SOME_IP_ADD>
Mira Context Line Control
en man grep
.
Una alternativa sería utilizar
-P Perl-regex
-z suppress-newline
-o print only matching
como en:
ss -i | grep -Pzo '.*IPADDRESS.*\n.*'
Entonces no obtendrás los guiones circundantes que proporciona el contexto.
Una alternativa podría ser sed:
sed -n '/IPADDRESS/{N;p}'
# Or joining the two lines by:
ss -i | sed -n '/IPADDRESS/N;s/\n/ /p'
mal:
awk '/IPADDRESS/{print; getline; print}'
# Or as joined lines:
awk '/IPADDRESS/{printf "%s ", $0; getline; print}'
Respuesta2
La ts sack ...
línea se coloca debajo de la ESTAB ...
línea porque así es como ss
siempre se formatea este tipo de información. No se está ajustando la línea. Puede incluir ambas líneas grep
usando la -A1
bandera:
ss -i | grep <IP ADDRESS> -A1
Puede combinar cada coincidencia en una línea pasándola mediante un sed
comando:
ss -i | grep <IP ADDRESS> -A1 | sed '/^--$/d;N;s/\n/ /g'