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 '/IPADDRESS/{print; getline; print}'
# Or as joined lines:
awk '/IPADDRESS/{printf "%s ", $0; getline; print}'
答え2
この行は通常、このタイプの情報フォーマットが指定される方法なので、その下にありますts sack ...
。梱包されていません。このフラグを使用して、次の2行を含めることができます。ESTAB ...
ss
grep
-A1
ss -i | grep <IP ADDRESS> -A1
コマンドを使用すると、各一致を渡して1行にマージできますsed
。
ss -i | grep <IP ADDRESS> -A1 | sed '/^--$/d;N;s/\n/ /g'