首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在linux shell中使用regex从文件中提取IP地址?

问如何在linux shell中使用regex从文件中提取IP地址?
EN

Stack Overflow用户
提问于 2009-01-09 13:05:48
回答 19查看 192.1K关注 0票数 68

如何在linux shell中使用regexp提取文本部分?假设我有一个文件,其中每一行都有一个IP地址,但位置不同。使用常用unix命令行工具提取这些IP地址的最简单方法是什么?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2009-01-09 13:11:28

您可以使用grep将它们提取出来。

代码语言:javascript
复制
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file.txt
票数 138
EN

Stack Overflow用户

发布于 2009-01-09 13:46:53

这里的大多数示例都将匹配999.999.999.999,从技术上讲,这不是一个有效的IP地址。

以下内容将仅匹配有效的IP地址(包括网络和广播地址)。

代码语言:javascript
复制
grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt

如果要查看匹配的整个行,请省略-o。

票数 45
EN

Stack Overflow用户

发布于 2014-08-30 02:08:09

在访问日志中,这对我来说很好。

代码语言:javascript
复制
cat access_log | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'

让我们把它一部分一部分地分解。

  • [0-9]{1,3}表示出现一到三次[]中提到的范围。在这种情况下,它是0-9。所以它匹配像10或183这样的模式。
  • 后面跟一个'.‘。我们需要将其转义为“‘”。是一个元字符,对外壳有特殊的含义。

所以我们现在的模式是“123”。“12”。等。

  • 此模式重复自身三次(使用'.')。所以我们把它括在括号里。([0-9]{1,3}\.){3}
  • And最后,模式会重复,但这次没有'.‘。这就是为什么我们在第三步单独保存它的原因。[0-9]{1,3}

如果在我的示例中,in位于每行的开头,请使用:

代码语言:javascript
复制
egrep -o '^([0-9]{1,3}\.){3}[0-9]{1,3}'

其中'^‘是一个锚点,它告诉我们在一行的开头进行搜索。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/427979

复制
相关文章

相似问题

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