
Когда я использовал эту команду в Red Hat Linux
/usr/sbin/ss -i
Я получаю следующий вывод ниже:
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
Всякий раз, когда я пытаюсь передать grep
эту команду ex
:
/usr/sbin/ss -i | grep <SOME_IP_ADD>
У меня есть этот вывод
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>
Обратите внимание, что grep не включил это:
ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3
потому что он на другой строке. Так как мне настроить ширину столбца, когда я использую эту команду или другие команды Linux, если на то пошло. Так что вывод не будет переноситься по словам или переходить на следующую строку? Есть ли у них лучшие способы сделать это?
решение1
Если в вашем grep есть эта -A1
опция, попробуйте ее.
Похоже, что дело не в переносе, а в том, что запись находится на отдельной строке.
/usr/sbin/ss -i | grep -A1 <SOME_IP_ADD>
Посмотрите Context Line Control
в man grep
.
Альтернативой было бы использование
-P Perl-regex
-z suppress-newline
-o print only matching
как в:
ss -i | grep -Pzo '.*IPADDRESS.*\n.*'
Тогда вы не увидите окружающие тире, которые дает контекст.
Альтернативой может быть sed:
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}'
решение2
Строка ts sack ...
расположена под ESTAB ...
строкой, потому что именно так ss
всегда форматируется этот тип информации. Она не переносится на новую строку. Вы можете включить обе строки, grep
используя -A1
флаг:
ss -i | grep <IP ADDRESS> -A1
Вы можете объединить каждое совпадение в одну строку, передав его через sed
команду:
ss -i | grep <IP ADDRESS> -A1 | sed '/^--$/d;N;s/\n/ /g'