我使用以下命令按字典顺序对所有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
Find命令输出:
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
如何根据预期输出对其进行排序。
通过管道sort -d
重定向输出。
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}' | sort -d
强制基数排序是否有效?
LC_ALL=C sort --radixsort
就是这样。无需指定分隔符-t、字段-k或稳定的-s
(ps:这些只是macOS上的BSD排序命令。我自己不太熟悉GNU排序(
-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