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

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

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

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

EN

回答 14

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用户

发布于 2009-01-09 13:35:49

我通常从grep开始,以获得正确的regexp。

代码语言:javascript
复制
# [multiple failed attempts here]
grep    '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*'                 file  # good?
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file  # good enough

然后,我会尝试将其转换为sed,以过滤掉该行的其余部分。(读完这篇文章后,你和我不会再这样做了:我们将使用grep -o。)

代码语言:javascript
复制
sed -ne 's/.*\([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\).*/\1/p  # FAIL

这就是我通常对sed不像其他人一样使用相同的正则表达式而感到恼火的时候。所以我搬到了perl

代码语言:javascript
复制
$ perl -nle '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ and print $&'

无论如何,Perl都很高兴知道这一点。如果您安装了少量的CPAN,您甚至可以以很少的成本使其更加可靠:

代码语言:javascript
复制
$ perl -MRegexp::Common=net -nE '/$RE{net}{IPV4}/ and say $&' file(s)
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/427979

复制
相关文章

相似问题

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