Linux
如何過濾多個字元串
對於以下幾行,我只需要過濾掉協議、埠和服務。
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
我需要這樣的:
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
這是一種方法:
sed -re 's/[^ ]+://' -e 's# +[0-9]+/# #' -e 's/:$//'
解釋:
sed -r
- 在擴展正則表達式模式下使用 sed-e 's/[^ ]+://'
- 向後刪除第一個冒號之前的所有內容,直到一個空格-e 's# +[0-9]+/# #'
- 用單個空格替換任意數量的空格、數字和斜線-e 's/:$//'
- 從行尾刪除一個冒號
這似乎更簡單易記。
-F
AWK 選項允許您提供一個正則表達式類,其中包含您需要拆分的字元。awk -F'[ :/]' '{print $1,$3,$5}' file
史蒂夫(下)提到了比我最初想像的更短的方法:
- 而不是
cat file | ...
只是把文件放在最後。- 美元項目之間的逗號添加空格。