2013-03-27 136 views
0

我有一個文件,我需要做一些簡單的修改。通常情況下,我不會有任何問題,但列幾乎相同,這使我不知所措。sed&awk,第二列修改

一些例子:

net_192.168.0.64_26 192.168.0.64_26 
net_192.168.0.128-26 192.168.0.128-26 

現在,通常在流我剛剛修改的第二列,但是我需要寫這其中混淆了我的文件。

以下字符串做什麼,我需要做的,但後來我失去了可視性的第一列,並不能管某處有用:

cat file.txt | awk '{print $2}' | sed 's/1_//g;s/2_//g;s/1-//g;s/2-//g;s/_/\ /g;s/-/\ /g' | egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' 

輸出需要的樣子(子網成爲第三列):

net_192.168.0.64_26 192.168.0.64 26 
net_192.168.0.128-26 192.168.0.128 26 

我該怎麼做上面這行做什麼,同時保持明顯的兩列,所以我可以將它們管到一個新的文件/修改舊等

謝謝!

回答

1

如果你只是想從一個空格來代替文字_-第二場然後:

$ awk '{gsub(/[-_]/," ",$2)}1' file 
net_192.168.0.64_26 192.168.0.64 26 
net_192.168.0.128-26 192.168.0.128 26 
+2

好吧,你先回答,我想這個給你:) 謝謝先生! – Numpty 2013-03-27 15:47:31

+0

@Numpty我的榮幸。 – 2013-03-27 15:50:51

2

試試這個,如果它是確定你:

awk '{gsub(/[_-]/," ",$2)}1' file 

與您的示例文本測試:

kent$ echo "net_192.168.0.64_26 192.168.0.64_26 
net_192.168.0.128-26 192.168.0.128-26"|awk '{gsub(/[_-]/," ",$2)}1' 
net_192.168.0.64_26 192.168.0.64 26 
net_192.168.0.128-26 192.168.0.128 26 
+0

媽就不錯。先生,做得很好。 – Numpty 2013-03-27 15:47:04

1

sed ver錫永:

sed 's/\(.*\)[-_]/\1 /' file