首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一行文本中提取2个或更多IP地址。

从一行文本中提取2个或更多IP地址。
EN

Server Fault用户
提问于 2010-01-29 09:30:04
回答 1查看 2.8K关注 0票数 0

我有大约30,000个Apache访问日志,其中一些日志列出了多个客户端IP地址。这是Apache记录X转发的报头而不是客户机的IP地址的结果。之所以这样做,是因为我们最近在web服务器前添加了haproxy。

接下来,我们将使用rpaf对Apache只记录一个IP地址,即到haproxy的传入连接的IP地址,因此这将不是一个持续的问题。

这就引出了一个实际的问题:

如何处理具有多个IP地址的现有日志,以只提取我想要的日志。我假设我需要sed或类似的东西,但我更喜欢Windows,所以不能百分之百肯定。

这些规则是:

  • 如果只有一个IP,则行不会被修改。
  • 如果有两个或更多的IP,我只想保留第二个IP。它们是用逗号分隔的。

示例1,1 IP

输入: 10.1.1.1 -- 2010年年1月29日:11:00 .(日志线的其余部分)

产出: 10.1.1.1 -- 2010年年1月29日:11:00 .(日志线的其余部分)

示例2,2个IP

输入: 10.1.1.1,10.2.2.2 - 2010年年1月29日:11:00 .(日志线的其余部分)

产出: 10.1.1.1 -- 2010年年1月29日:11:00 .(日志线的其余部分)

示例3,3个IP

输入: 10.1.1.1,10.2.2.2,10.3.3.3 - 2010年年1月29日:11:00 .(日志线的其余部分)

输出: 10.2.2.2 - 2010年年1月29日:11:00 .(日志线的其余部分)

EN

回答 1

Server Fault用户

回答已采纳

发布于 2010-01-29 10:18:00

这可以通过在日志上运行这个sed命令来实现:

sed "s/^(0-9+.0-9+.0-9+.0-9+,)*(0-9+.0-9+.0-9+.0-9+),0-9+.0-9+.0-9+.0-9+ -/\2 -//“

一些解释:

  • 一般格式是s/MATCH PATTERN/REPLACE PATTERN/
  • 匹配是在字符串"some“(0到多次)上进行的,后面是”一些IP“(这是我们希望保留的),最后是”一些IP -“(最后一个要丢弃的IP )。
  • 没有必要匹配第一格式的行(只有一个IP),因为它不需要更改。
  • 最后一节包含\2,它引用括号中的匹配的第二部分。
  • 当在shell中运行时,许多字符必须转义(用反斜杠:),例如方括号:(),加号:+ (意思是“至少一次”)和文字字符句点:. (否则它被认为是通配符)。
  • -i选项到sed意味着更改文件的位置。确保你在拷贝上工作!
票数 7
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/107478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档