Bash,从用点分隔的字符串中切断IP

1 bash sed awk cut

我在格式中有多个结果

10.3.2.1.in-addr.arpa name hostname
Run Code Online (Sandbox Code Playgroud)

我想删除中间部分“.in-addr.arpa”并将IP地址反转为例如1.2.3.10。用简单的 bash one 衬垫可以吗?提前致谢,我正在尝试这样做,因为几个小时和有点卡住了。

Sté*_*las 6

perl

perl -pe 's/(\d+)\.(\d+)\.(\d+)\.(\d+)\.in-addr\.arpa/$4.$3.$2.$1/g' < input
Run Code Online (Sandbox Code Playgroud)

与标准sed等价物相比,它不那么冗长且更清晰:

d='\([0-9]\{1,\}\)'
LC_ALL=C sed "s/$d\.$d\.$d\.$d\.in-addr\.arpa/\4.\3.\2.\1/g" < input
Run Code Online (Sandbox Code Playgroud)

那些替换所有出现的<d1>.<d2>.<d3>.<d4>.in-addr.arpawith <d4>.<d3>.<d2>.<d1>(其中<dX>是一个或多个十进制数字的任何序列),其他所有内容保持不变。


Ed *_*ton 5

$ awk '{split($1,p,"."); $1=p[4]"."p[3]"."p[2]"."p[1]} 1' file
1.2.3.10 name hostname
Run Code Online (Sandbox Code Playgroud)