忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 647 | 回复: 7

[文本处理] sed搜索所有IP [复制链接]

论坛徽章:
0
发表于 2018-06-30 16:27 |显示全部楼层
本帖最后由 liuyuhui_gdtyj 于 2018-07-01 10:05 编辑

一份文件,内容杂七杂八,包含合法与不合法的ip,一行中可能没有ip,也可能有多个ip,现在要用grep\awk\sed三种方法实现把其中合法的IP都列出来。我用grep和awk已实现,用sed实现不了,求各位高人指点~

grep -E -o "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" filename

awk '{for(i=1;i<=NF;i++){if(match($i,/((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/)>0){print substr($i,RSTART,RLENGTH)}}}' filename

sed -nr 's/.*\<(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9]).*$/\1.\2.\3.\4/p' filename

这个sed只会找到一行中最后一组ip,怎么找出一行中所有ip呢?

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-07-01 09:55 |显示全部楼层
本帖最后由 1cpuer 于 2018-07-01 10:10 编辑

sed -n '//p'
sed -rn '//p'
{} ->\{\} ()-> \(\)
| -> \| ----> or -o

论坛徽章:
0
发表于 2018-07-01 10:07 |显示全部楼层
回复 2# 1cpuer

不太明白,我修改了之前的内容,见新的描述。

论坛徽章:
0
发表于 2018-07-01 13:24 |显示全部楼层
我说过powershell 【强】【简】死你,我说过powershell是屠龙刀。

powershell 判断ip是否合法,可以使用任意代码,切割出一个ip,
然后用类方法判断,了解一下,支持win,linux。

  1. PS A:\pscode> $isIpValid = [System.Net.IPAddress]::tryparse('192.168.1.254', [ref]"1.1.1.1")
  2. PS A:\pscode> $isipvalid
  3. True
  4. PS A:\pscode> $isIpValid = [System.Net.IPAddress]::tryparse('192.168.1.255', [ref]"1.1.1.1")
  5. PS A:\pscode> $isipvalid
  6. True
  7. PS A:\pscode> $isIpValid = [System.Net.IPAddress]::tryparse('192.168.1.256', [ref]"1.1.1.1")
  8. PS A:\pscode> $isipvalid
  9. False
  10. PS A:\pscode>
复制代码

论坛徽章:
0
发表于 2018-07-01 15:21 |显示全部楼层
回复 4# 本友会机友会摄友会

可惜我只学过linux自带的bash,连perl都没学过

论坛徽章:
1
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:28
发表于 2018-07-02 11:27 |显示全部楼层
本帖最后由 christmas1102 于 2018-07-03 11:05 编辑

审核的真莫名

论坛徽章:
1
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:28
发表于 2018-07-02 11:33 |显示全部楼层
本帖最后由 christmas1102 于 2018-07-03 10:12 编辑

回复 1# liuyuhui_gdtyj

  1. ifconfig |grep -Po '(\d+\.){3}\d+'
复制代码
  1. ifconfig |awk --re-interval '{for(i=1;i<=NF;i++){if(match($i,/(([0-9]+\.){3}[0-9]+)/,a)){print a[1]}}}'
复制代码
  1. ifconfig |sed -rn 's#([^0-9]*)(([0-9]+\.){3}[0-9]+)([^0-9]*)#\2\n#gp' | sed '/^$/d'
复制代码

是grep的活,就该给它做,干嘛要把事情复杂化

论坛徽章:
0
发表于 2018-07-03 17:52 |显示全部楼层
回复 4# 本友会机友会摄友会

大哥,你是来shell论坛砸场子的吗?我说一下我的看法,powershell确实很强大,但是学过linux shell再去看powershell,我觉得最难接受的一点就是ps的参数或者调用对象参数太长,看着好累,关于文本处理的怎么都觉得三剑客比较爽。虽说三剑客好像也支持windows吧。还有就是学习资料,视频之类的不是很多。http://www.pstips.net/why-is-powershell-powerful.html,你有推荐的吗?我的学习方式是看视频,然后再查资料...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP