我试图通过选择分隔符来删除整数。
我想选择第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
想要从ip 2.2.2.2:48130 删除端口号为 2.2.2.2 ,但不应影响其他列
请分享您的想法...
感谢Tom和Lars都工作
答案 0 :(得分:2)
您可以在第三和第四个字段上使用awk及其子函数,如下所示:
awk '{ sub(/:[0-9]+/, "", $3 );sub(/:[0-9]+/, "", $4 ) ; print }' file
这将从所有行中删除端口号。
答案 1 :(得分:1)
只需使用sed匹配IP地址并删除端口:
sed -E 's/(([0-9]+\.){3}[0-9]+):[0-9]+/\1/;s/(([0-9]+\.){3}[0-9]+):[0-9]+/\1/' file
IP地址匹配并用于替换,丢弃端口。
这个模式将匹配每行看起来模糊地像IP地址的第一件事(即由点分隔的四个整数),这对于您已经显示的输入而言并不是问题,但是要记住这一点。
如果你想在每一行上进行两次替换,那么你也可以这样做:
TZ
如果您使用awk,那么您可以直接定位第三个字段,但您也将重新格式化您触摸的任何行。