首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed -如何使用sed提取IP地址?

sed -如何使用sed提取IP地址?
EN

Stack Overflow用户
提问于 2013-02-18 02:22:20
回答 6查看 71K关注 0票数 20

这是一个作业,所以我别无选择,只能使用sed。

给定一个文件消息,我如何提取所有IP地址并打印它们?

我第一次尝试

代码语言:javascript
复制
sed -n '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' messages

但它什么也没印。在做了一些研究之后,我发现sed不支持非贪婪的操作符。还有。

我一直在绞尽脑汁,但没有非贪婪的操作者,我想不出有什么办法可以做到这一点。我该怎么做?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-02-18 02:33:52

使用sed -r (extended )或用\转义捕获组

票数 10
EN

Stack Overflow用户

发布于 2013-02-18 02:28:21

grep在那里会更合适(如果您有sed,您也应该拥有grep ):

代码语言:javascript
复制
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' messages

这是您自己的regex,没有任何修改(测试确定)

票数 42
EN

Stack Overflow用户

发布于 2013-02-18 03:04:56

如果您有GNU sed,您可以简单地添加-r标志以使用ERE:

代码语言:javascript
复制
sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file

否则,您将需要转义某些字符:

代码语言:javascript
复制
sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' file

这些字符包括:

  • 使用括号的组:()
  • 出现括号:{}
  • “或”管道:|
  • 非贪婪问号:?

通常(尽管不是针对您的情况),我使用以下方法来匹配IP地址:

代码语言:javascript
复制
sed -rn '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' file

或在兼容模式下:

代码语言:javascript
复制
sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p' file
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14928573

复制
相关文章

相似问题

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