【发布时间】:2011-12-25 20:11:08
【问题描述】:
我通常在我的 Mac 上编写脚本,然后一旦准备好,我就会将它们发送到我工作时的测试盒中。我在这里面临的问题是我有一个数据流,它是十六进制格式的 IP 地址。我正在使用 sed 和 awk 的组合来解析它并将其转换为更易读的格式。
$echo $content12
cb5c860100000000000000000000000000
[DoD@MBP-13~] echo $content12 |
sed -e 's/../&./g' -e 's/.$//' | sed 's/[0-9a-z][0-9a-z]/0x&/g' |
awk -F"." '{for (i=1;i<NF;i++) printf ("%d\n", $i)}' |
awk '{if (NR<5) printf $0; printf "."}' | sed 's/\.\.*$//'
203.92.134.1
当我在工作中将它移植到我的测试盒时,脚本没有按预期工作。
$echo $content12 |
sed -e 's/../&./g' -e 's/.$//' | sed 's/[0-9a-z][0-9a-z]/0x&/g' |
awk -F"." '{for (i=1;i<NF;i++) printf ("%d\n", $i)}' |
awk '{if (NR<5) printf $0; printf "."}' | sed 's/\.\.*$//'
0.0.0.0
我的 Mac 上的 awk 和 uname 版本 -
[DoD@MBP-13~] awk --version
awk version 20070501
[DoD@MBP-13~] uname -a
Darwin MBP-13.local 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug 9 20:54:00 PDT 2011;
root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64
工作中我的测试盒上的 awk 和 uname 版本 -
$ awk --version
GNU Awk 3.1.5
Copyright (C) 1989, 1991-2005 Free Software Foundation
$uname -a
Linux 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010
x86_64 x86_64 x86_64 GNU/Linux
这是我可以通过小的改动来解决的问题吗?我对 UNIX 环境还很陌生,所以我的单行代码对您来说可能看起来异常长。任何建议将不胜感激。
【问题讨论】: