LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1534|回复: 9

大家好如何从ifconfig中使用perl来提取到ip地址

[复制链接]
发表于 2007-10-19 11:18:44 | 显示全部楼层 |阅读模式
大家好如何从ifconfig中使用perl来提取到ip地址。谢谢。
因为在perl脚本中无法使用awk,当执行无法实现。
ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:764:A3:0D
inet addr:172.31.12.36 Bcast:172.31.12.255 Mask:255.255.255.0
inet6 addr: fe80::216:76ff:fed4:a30d/64 Scopeink
使用 ifconfig | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | grep -v '127'| cut -d: -f2 | awk '{print $1}'
出来
172.31.12.36

但是在脚本中无法把ip地址给一个变量。
发表于 2007-10-19 16:10:23 | 显示全部楼层
使用 ip 命令

  1. foreach (qx|ip addr show dev eth0|) {
  2.         if (/^\s+inet ([0-9\.]+)\/\d+/) {
  3.                $ip = $1; last;
  4.         }
  5.     }
复制代码


使用 ifconfig 命令

  1.     foreach (qx|ifconfig eth0|) {
  2.         if (/^\s+inet addr:([0-9\.]+)/) {
  3.                $ip = $1; last;
  4.         }
  5.     }
复制代码


其实字符串匹配是perl的强项,不需要使用 awk 和 grep 来完成[QUOTE][/QUOTE]
回复 支持 反对

使用道具 举报

发表于 2007-10-21 13:19:39 | 显示全部楼层

用perl提起ip信息

Post by lichengshuang
大家好如何从ifconfig中使用perl来提取到ip地址。谢谢。
因为在perl脚本中无法使用awk
用  perl -lne ' print $1 if ( /((\d{1,3}\.){3}\d{1,3})/ ) '    试试 接下来就看你发挥了 good luck
回复 支持 反对

使用道具 举报

发表于 2007-10-21 17:05:15 | 显示全部楼层
Post by xuanfei
用  perl -lne ' print $1 if ( /((\d{1,3}\.){3}\d{1,3})/ ) '    试试 接下来就看你发挥了 good luck

perl 果然强大.
能解释下-ln的意义吗?
回复 支持 反对

使用道具 举报

发表于 2007-10-22 00:31:30 | 显示全部楼层
看看这个就明白
  1. perl -MO=Deparse -le 1
  2. perl -MO=Deparse -lne 1
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-10-22 01:20:04 | 显示全部楼层
顺便问问,如果一个文本里面含有IP地址,内容如下:
15.16.17.18 and 18.52.62.15 and 64.28.59.75
21.23.25.29 or 15.156.15.48 or 184.46.46.4

如何用perl将里面的所有IP地址都过滤出来输出到文件IP.txt中?
要求得到的IP.txt的内容就是:
15.16.17.18
18.52.62.15
64.28.59.75
21.23.25.29
15.156.15.48
184.46.46.4
回复 支持 反对

使用道具 举报

发表于 2007-10-22 01:29:38 | 显示全部楼层
  1. [ 01:29:18 | /tmp | $?: 0 ]
  2. $ cat txt
  3. 15.16.17.18 and 18.52.62.15 and 64.28.59.75
  4. 21.23.25.29 or 15.156.15.48 or 184.46.46.4
  5. [ 01:29:20 | /tmp | $?: 0 ]
  6. $ perl -lne ' print $1 while /((:?\d{1,3}\.){3}\d{1,3})/g ' txt
  7. 15.16.17.18
  8. 18.52.62.15
  9. 64.28.59.75
  10. 21.23.25.29
  11. 15.156.15.48
  12. 184.46.46.4
  13. [ 01:29:23 | /tmp | $?: 0 ]
  14. $                                                         
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-10-22 02:28:45 | 显示全部楼层
非常感谢huan的回复.
另外想请教一下那个Perl命令里面“:?”有什么作用,剔除“:?”似乎也成。
回复 支持 反对

使用道具 举报

发表于 2007-10-22 13:18:27 | 显示全部楼层
每一个被()捕获的串都将被放入$1, $2...中
(:?)取消这个功能, 只是分组
详细请看Perl扩展正则的解释
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-25 14:17:34 | 显示全部楼层
谢谢大家

啥也不说了,就是学习。谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表