0

我有一个文件,我需要对其进行一些简单的修改。通常,我不会有问题,但是列几乎相同,这让我很失望。

一些例子:

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

ETC

现在,通常在流中我只修改第二列,但是我需要将其写入一个让我感到困惑的文件。

下面的字符串做了我需要它做的事情,但是我失去了对第一列的可见性,并且无法将它传递到有用的地方:

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}'

输出需要看起来像(子网成为第 3 列):

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

我该如何做上述行,同时保持两列可见,以便我可以将它们通过管道传输到新文件/修改旧文件等。

谢谢!

4

3 回答 3

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
于 2013-03-27T15:43:47.747 回答
1

如果您只想替换 characters _-请在第二个字段中使用一个空格,然后:

$ 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
于 2013-03-27T15:43:56.763 回答
1

还有一个sed版本:

sed 's/\(.*\)[-_]/\1 /' file
于 2013-03-27T19:54:40.600 回答