如何过滤多个字符串

Dav*_*vid 3 linux grep sed awk text-processing

对于以下几行,我只需要过滤掉协议、端口和服务。

tcp 127.0.0.1:25  1147/master
tcp 0.0.0.0:443  1039/nginx:
tcp 127.0.0.1:8001  1218/python
tcp 0.0.0.0:10050  939/zabbix_agentd
tcp 127.0.0.1:6379  891/redis-server
tcp 0.0.0.0:80  1039/nginx:
tcp 0.0.0.0:22  889/sshd
tcp 127.0.0.1:5432  929/postmaster
udp 127.0.0.1:323 645/chronyd
Run Code Online (Sandbox Code Playgroud)

我需要这样:

tcp 25 master
tcp 443 nginx
tcp 8001 python
tcp 10050 zabbix_agentd
tcp 6379 redis-server
tcp 80 nginx
tcp 22 sshd
tcp 5432 postmaster
udp 323 chronyd
Run Code Online (Sandbox Code Playgroud)

小智 5

这看起来更直接,更容易记住。该-F选项AWK允许您提供一个正则表达式类,包含你需要分割上的字符。

awk -F'[ :/]' '{print $1,$3,$5}' file
Run Code Online (Sandbox Code Playgroud)

史蒂夫(下面)提到了一种比我原先想到的更短的方法:

  • 而不是cat file | ...将文件放在最后。
  • 美元项目之间的逗号添加空格。