这是一个作业,所以我别无选择,只能使用sed。
给定一个文件消息,我如何提取所有IP地址并打印它们?
我第一次尝试
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不支持非贪婪的操作符。还有。
我一直在绞尽脑汁,但没有非贪婪的操作者,我想不出有什么办法可以做到这一点。我该怎么做?
发布于 2013-02-18 02:33:52
使用sed -r (extended )或用\转义捕获组
发布于 2013-02-18 02:28:21
grep在那里会更合适(如果您有sed,您也应该拥有grep ):
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,没有任何修改(测试确定)
发布于 2013-02-18 03:04:56
如果您有GNU sed,您可以简单地添加-r标志以使用ERE:
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否则,您将需要转义某些字符:
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地址:
sed -rn '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' file或在兼容模式下:
sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p' filehttps://stackoverflow.com/questions/14928573
复制相似问题