首页 > 解决方案 > 按字典顺序选择和排序 IP 地址

问题描述

我正在使用以下命令按字典顺序对所有 IP 地址进行排序。

find /root/data -type f -exec grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" {} \; | sort | uniq -c | awk '{print $2}'

我应该得到这个预期的输出:

0.0.0.0
127.0.0.1
127.0.49.1
127.0.64.1
127.65.64.1
127.98.0.1
128.128.4.11
128.57.107.76
128.68.4.11
128.96.107.55
128.99.107.55
128.99.58.55
15.128.4.65
26.56.4.23
67.128.4.11
7.7.7.8
74.0.65.76
77.255.255.254

查找命令的输出:

127.0.0.1
128.99.107.55
128.128.4.11
74.0.65.76
15.128.4.65
0.0.0.0
127.65.64.1
127.0.64.1
127.0.0.1
128.57.107.76
67.128.4.11
7.7.7.8
127.98.0.1
128.96.107.55
128.68.4.11
127.0.49.1
128.99.58.55
77.255.255.254
26.56.4.23

如何根据预期的输出对其进行排序。

标签: bashshell

解决方案


-t选项告诉sort使用句点作为字段分隔符。这些-k选项告诉 sort 要使用哪些字段。注意:要按数字顺序排序,请添加-n选项。

sort -t. -k1 -k2 -k3 -k4 unsorted

输出:

0.0.0.0
127.0.0.1
127.0.0.1
127.0.49.1
127.0.64.1
127.65.64.1
127.98.0.1
128.128.4.11
128.57.107.76
128.68.4.11
128.96.107.55
128.99.107.55
128.99.58.55
15.128.4.65
26.56.4.23
67.128.4.11
7.7.7.8
74.0.65.76
77.255.255.254

推荐阅读