Awk linux文本解析-";选择列并使用分隔符“删除整数”;

Awk linux文本解析-";选择列并使用分隔符“删除整数”;,awk,sed,text-parsing,Awk,Sed,Text Parsing,我试图通过选择分隔符来删除整数 我想选择第3列和第4列并删除“:”delimeter之后的端口,我已经尝试了下面的命令。但它会准时取消第一场比赛00:56:37 sed 's/:/ /' 现在产量, 2016-03-29 00:56:37 0.0.0.0:48130 10.0.1.117:80 404 404 http://52.4.12.23:80/CHANGELOG.txt "Mozilla/5.0 (Windows 2016-03-29 00:57:20 1.1.1.1:37020 10

我试图通过选择分隔符来删除整数

我想选择第3列和第4列并删除“:”delimeter之后的端口,我已经尝试了下面的命令。但它会准时取消第一场比赛00:56:37

sed 's/:/ /'
现在产量,

2016-03-29 00:56:37 0.0.0.0:48130 10.0.1.117:80 404 404 http://52.4.12.23:80/CHANGELOG.txt "Mozilla/5.0 (Windows
2016-03-29 00:57:20 1.1.1.1:37020 10.0.0.197:80 404 404 http://52.4.12.23:80/readme.html "Mozilla/5.0 (Windows
2016-03-29 02:52:46 2.2.2.2:47442 10.0.0.197:80 404 404 http://testp3.pospr.waw.pl:80/testproxy.php "Mozilla/5.0 (Windows
所需产量

2016-03-29 00:56:37 0.0.0.0 10.0.1.117 404 404 http://52.4.12.23:80/CHANGELOG.txt "Mozilla/5.0
2016-03-29 00:57:20 1.1.1.1 10.0.0.197 404 404 http://52.4.12.23:80/readme.html "Mozilla/5.0
2016-03-29 02:52:46 2.2.2.2 10.0.0.197 404 404 http://testp3.pospr.waw.pl:80/testproxy.php "Mozilla/5.0
要将端口号从ip2.2.2:48130删除到2.2.2,但不应影响其他列

请分享你的想法


谢谢Tom和Lars都工作了

您可以在第三和第四个字段上使用awk及其子功能,如下所示:

awk '{ sub(/:[0-9]+/, "", $3 );sub(/:[0-9]+/, "", $4 ) ; print  }' file

这将从所有行中删除端口号。

只需使用sed匹配IP地址并删除端口:

sed -E 's/(([0-9]+\.){3}[0-9]+):[0-9]+/\1/' file
IP地址匹配并用于替换,丢弃端口

此模式将匹配每行上第一个看起来模糊地像IP地址的内容(即四个由点分隔的整数),这对于您显示的输入来说不是问题,但需要记住

如果要在每行上进行两次替换,也可以这样做:

sed -E 's/(([0-9]+\.){3}[0-9]+):[0-9]+/\1/;s/(([0-9]+\.){3}[0-9]+):[0-9]+/\1/' file

如果使用awk,则可以直接将第三个字段作为目标,但也会重新格式化所接触的任何行。

您的输入和输出不匹配。你自己试过什么吗?请回答您的问题以解决这两个问题。您还从http:and before 80中删除了
。故意的还是输入错误?请显示您的编码努力。@karakfa-很抱歉输入错误。谢谢Tom的工作。。。如果你不介意,请分享任何学习sed的好链接…嗨,拉尔斯,谢谢它的工作。。。如果你不介意,请分享任何学习awk的好链接。@Sasee,叫我老式,但我喜欢Gawk:高效的awk编程,请参阅