Bash 经济及社会发展局局长;awk,第二列修改

Bash 经济及社会发展局局长;awk,第二列修改,bash,sed,awk,Bash,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 '{prin

我有一个文件需要做一些简单的修改。通常情况下,我不会有任何问题,但是这些列几乎完全相同,这让我很反感

一些例子:

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}'
输出需要如下所示(子网成为第三列):

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


谢谢

如果你觉得合适,试试这个:

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

如果您觉得合适,请尝试以下方法:

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

如果您只想用第二个字段中的单个空格替换字符
-
,则:

$ 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

如果您只想用第二个字段中的单个空格替换字符
-
,则:

$ 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

以及
sed
版本:

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

以及
sed
版本:

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

好吧,你先回答,我想这是你的:)谢谢你,先生!好吧,你先回答,我想这是你的:)谢谢你,先生!