次の行では、プロトコル、ポート、およびサービスのみをフィルタリングできます。
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
答え1
これはもっと簡単で覚えやすいようです。 AWKのオプション-F
を使用すると、分割する必要がある文字を含む正規表現クラスを提供できます。
awk -F'[ :/]' '{print $1,$3,$5}' file
Steve(以下)は、私が当初考えていたよりも短いアプローチに言及しました。
cat file | ...
ファイルを一番最後に置く代わりに。- ドル項目間のカンマはスペースを追加します。
答え2
1つの方法は次のとおりです。
sed -re 's/[^ ]+://' -e 's# +[0-9]+/# #' -e 's/:$//'
説明する:
sed -r
- 拡張正規表現モードでsedを使用する-e 's/[^ ]+://'
- 空白が出るまで、最初のコロンの前のすべての内容を後ろに削除します。-e 's# +[0-9]+/# #'
- 複数のスペース、数字、スラッシュを1つのスペースに置き換えます。-e 's/:$//'
- 行の末尾からコロンを削除します。
答え3
cat file | sed 's/[:/]/\t/g' | awk '{print $1 " " $3 " " $5}'
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 chr
sed 's/[:/]/\t/g' convert `:` and '/` to tab
答え4
一つawk
:
$ awk '{ print $1, gensub( /^.*:/, "", "1", $2 ), gensub( /[0-9]+\//, "", "1", $3 ) }' input
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