如何在 Linux 命令输出中调整列宽

dim*_*mas 4 grep text-processing columns

当我在 Red Hat Linux 上使用这个命令时

/usr/sbin/ss -i
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

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
Run Code Online (Sandbox Code Playgroud)

每当我尝试通过管道grep传输到该命令时ex

/usr/sbin/ss -i | grep <SOME_IP_ADD>
Run Code Online (Sandbox Code Playgroud)

我有这个输出

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>
Run Code Online (Sandbox Code Playgroud)

请注意,grep 不包括以下内容:

ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3
Run Code Online (Sandbox Code Playgroud)

因为它在另一条线上。那么,每当我使用此命令或其他 Linux 命令时,如何调整列宽。以便输出不会自动换行或转到下一行?他们这样做的更好方法是什么?

Run*_*ium 5

如果您的 grep 有它,请尝试该-A1选项。

看起来这不是换行的情况,而是条目位于单独的行上。

/usr/sbin/ss -i | grep -A1 <SOME_IP_ADD>
Run Code Online (Sandbox Code Playgroud)

看看Context Line Controlman grep

另一种方法是使用

-P Perl-regex 
-z suppress-newline
-o print only matching
Run Code Online (Sandbox Code Playgroud)

如:

ss -i | grep -Pzo '.*IPADDRESS.*\n.*'
Run Code Online (Sandbox Code Playgroud)

然后你不会得到上下文给出的周围破折号。


可以使用 sed 替代:

sed -n '/IPADDRESS/{N;p}'
# Or joining the two lines by:
ss -i | sed -n '/IPADDRESS/N;s/\n/ /p'
Run Code Online (Sandbox Code Playgroud)

awk:

awk '/IPADDRESS/{print; getline; print}'
# Or as joined lines:
awk '/IPADDRESS/{printf "%s ", $0; getline; print}'
Run Code Online (Sandbox Code Playgroud)