寻求符合POSIX标准的sh脚本反转IP地址的优雅实现方案
符合POSIX标准的Unix Shell IP地址反转方法
可以用awk实现完全符合POSIX标准的IP反转,同时解决你提到的两个问题:
RevIP() { echo "$1" | awk -F. '{for(i=NF;i>0;i--) printf "%s%s", $i, (i>1 ? "." : "\n")}' }
示例用法:
$ RevIP 23.45.67.89 89.67.45.23
方案说明
- 用
awk的-F.指定分隔符为点,替代tr拆分IP段,减少额外进程开销 - 从最后一个字段(
NF代表字段总数)倒序遍历输出,每个字段后根据是否为倒序的最后一个元素,决定输出点或换行符,彻底避免末尾多余的点 - 全程依赖POSIX标准工具(
echo、awk均为POSIX强制要求的基础工具),无需tac这类非标准命令
替代简化写法(同样符合POSIX)
如果追求写法直观,也可以用多工具组合实现,不过进程数略多:
RevIP() { echo "$1" | sed 's/\./\n/g' | awk '{a[NR]=$0} END{for(i=NR;i>0;i--) print a[i]}' | paste -sd. - }
该写法先拆分IP段存入数组,倒序输出后用paste合并,同样符合POSIX规范。
内容的提问来源于stack exchange,提问作者P Varga
相关产品推荐
相关产品推荐

