2015-09-17 45 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