我有一个文件,我需要做一些简单的修改。通常情况下,我不会遇到问题,但是这些列几乎完全相同会让我失望。
一些例子:
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}'
输出需要看起来像(子网成为第3列):
net_192.168.0.64_26 192.168.0.64 26
net_192.168.0.128-26 192.168.0.128 26
如何保持上述行的功能,同时保持两列可见,以便将它们传输到新文件/修改旧文件等。
谢谢!
答案 0 :(得分: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
答案 1 :(得分: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 :(得分:1)
sed
版本:
sed 's/\(.*\)[-_]/\1 /' file