Linuxコマンド出力で列幅を調整する方法

Linuxコマンド出力で列幅を調整する方法

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 Controlman 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}'

おすすめ記事