执行ss命令后cut命令出现问题
Trouble with cut command after executing ss command
这是我使用的基本剪切语法:
[jay@webserver ~]$ ss -tn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
ESTAB 0 232 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
但是当我尝试在字段上剪切时,我没有得到适当的输出:
[jay@webserver ~]$ ss -tn | grep -v State | cut -d$'\t' -f3,4
ESTAB 0 36 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
ESTAB 0 68 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
我唯一能想到的是分隔符不是制表符,但在那种情况下我怎么能得到我想要的输出?
ss 的输出以空格分隔。我建议使用 awk:
ss -tn | grep -v State | awk '{print ,}'
如果您不介意使用 awk
,您可以使用(这也节省了对 grep 的调用):
ss -tn | awk '[=10=]!~/State/{print , }'
改用 awk
,它默认将一个或多个空白字符计为一个分隔符:
ss -tn | grep -v State | awk '{print ,}'
此外,这是跳过第一行的更通用的方法:
ss -tn | tail -n+2 | awk '{print ,}'
这适用于我的机器。
基本上,将 8 个空格中的每一个更改为制表符,删除其他空格。
ss -tn | unexpand -t 8 | tr $'\t' '|' |tr -d [:blank:] | tr '|' $'\t' | expand -t 1 | cut -f4- -d ' '
或
这个:
ss -tn | expand -t 1 | unexpand -t 8 | cut -f4- -d$'\t'
这是我使用的基本剪切语法:
[jay@webserver ~]$ ss -tn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
ESTAB 0 232 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
但是当我尝试在字段上剪切时,我没有得到适当的输出:
[jay@webserver ~]$ ss -tn | grep -v State | cut -d$'\t' -f3,4
ESTAB 0 36 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
ESTAB 0 68 xxx.xx.xx.xx:xx xxx.xx.xx.xx:xx
我唯一能想到的是分隔符不是制表符,但在那种情况下我怎么能得到我想要的输出?
ss 的输出以空格分隔。我建议使用 awk:
ss -tn | grep -v State | awk '{print ,}'
如果您不介意使用 awk
,您可以使用(这也节省了对 grep 的调用):
ss -tn | awk '[=10=]!~/State/{print , }'
改用 awk
,它默认将一个或多个空白字符计为一个分隔符:
ss -tn | grep -v State | awk '{print ,}'
此外,这是跳过第一行的更通用的方法:
ss -tn | tail -n+2 | awk '{print ,}'
这适用于我的机器。 基本上,将 8 个空格中的每一个更改为制表符,删除其他空格。
ss -tn | unexpand -t 8 | tr $'\t' '|' |tr -d [:blank:] | tr '|' $'\t' | expand -t 1 | cut -f4- -d ' '
或 这个:
ss -tn | expand -t 1 | unexpand -t 8 | cut -f4- -d$'\t'