2015-09-17 44 views
3

我有一个txt文件,其中包含一个针对域名的ip地址列表。例如;与sed反向IP地址格式

1.1.168.192 example1.example1.net 
2.1.168.192 example2.example2.net 
3.1.168.192 example3.example3.net 
..... 
12.1.168.192 example12.example12.net 

我无法让我的sed命令改变输出到;

192.168.1.1 example1.example1.net 
192.168.1.2 example2.example2.net 
192.168.1.3 example3.example3.net 
.... 
192.168.1.12 example12.example12.net 

sed命令我使用的是使用它

sed -r 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/\4.\3.\2.\1/' 

cat filename | sed -r 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/\4.\3.\2.\1/' 
+0

你不应该为此使用'cat'。 'cat'是*连接*文件。使用'sed -r'...'filename',或者如果命令只从stdin读取,则使用I/O重定向:'command

+0

在样本输入/输出中, - 它只是让我们难以测试一个可能的解决方案(因为我们需要在复制/粘贴后编辑您的文件以删除这些文件,而且我们有时不确定这些文件是否应该删除,或者它们是否存在你的真实输入文件),所以请不要这样做。 –

回答

2

唯一的问题是,你已经包括在你的模式锚$,它试图匹配每行的结尾但失败。你只需要将其删除:

$ sed -r 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/\4.\3.\2.\1/' file 
192.168.1.1 example1.example1.net 
192.168.1.2 example2.example2.net 
192.168.1.3 example3.example3.net 

请注意,我传递文件名作为参数传递给sed的,从而避免无用的使用猫。

+1

谢谢汤姆,工作过。 – user62597

0

AWK版本

awk '{split(".",i,$1);printf "%d.%d.%d.%d %s\n",i[4],i[3],i[2],i[1],$2}' YourFile 
0
$ sed -r 's/([^.]+)(\.[^.]+)(\.[^.]+)\.([^ ]+)/\4\3\2.\1/' file 
192.168.1.1 example1.example1.net 
192.168.1.2 example2.example2.net 
192.168.1.3 example3.example3.net 
192.168.1.12 example12.example12.net