LinuxSir.cn,穿越时空的Linuxsir!

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

cut sed 组合 请教更好的表达式

[复制链接]
发表于 2007-6-20 23:53:10 | 显示全部楼层 |阅读模式
[root@localhost xml]# sed -n '/HOSTNAME="delivery"/,/IPADDR=/p' *.xml | grep "IPADDR"


   
                        <ifcfg DEVICE="eth1" HWADDR="00:14:22:18:F7:C5" IPADDR="202.219.234.18"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:14:22:18:F4:FF" IPADDR="202.219.234.30"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E4:7F:60" IPADDR="202.219.234.42"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E4:3A:8F" IPADDR="202.219.234.54"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E4:7F:F8" IPADDR="202.219.234.66"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E4:7F:65" IPADDR="202.219.234.78"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E5:3F:92" IPADDR="202.219.234.90"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E5:3E:4C" IPADDR="202.219.234.102"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E5:3A:FA" IPADDR="202.219.234.114"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E5:3B:BD" IPADDR="202.219.234.126"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E5:32:0E" IPADDR="202.219.234.138"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:16:E7:E5:32:92" IPADDR="202.219.234.150"/>


sed -n '/HOSTNAME="delivery"/,/IPADDR=/p' *.xml | grep "IPADDR" | cut -c60-





202.219.234.18"/>
202.219.234.30"/>
202.219.234.42"/>
202.219.234.54"/>
202.219.234.66"/>
202.219.234.78"/>
202.219.234.90"/>
202.219.234.102"/>
202.219.234.114"/>
202.219.234.126"/>
202.219.234.138"/>
202.219.234.150"/>

sed -n '/HOSTNAME="delivery"/,/IPADDR=/p' *.xml | grep "IPADDR" | cut -c60- | sed -e 's/"//' |sed -e 's/\///' | sed -e 's/>//'


202.219.234.18
202.219.234.30
202.219.234.42
202.219.234.54
202.219.234.66
202.219.234.78
202.219.234.90
202.219.234.102
202.219.234.114
202.219.234.126
 楼主| 发表于 2007-6-20 23:55:31 | 显示全部楼层
需要提取ip
回复 支持 反对

使用道具 举报

发表于 2007-6-21 00:53:08 | 显示全部楼层
姑且把第一段数据当原始数据吧

  1. grep -o '[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' urfile

  2. 或者
  3. sed -r 's/.*"([[:digit:].]+).*/\1/' urfile
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-6-21 02:06:55 | 显示全部楼层
如果可以用perl的话,:
$ perl -lne 'print $1 if /IPADDR="(.*)"/' iptest
202.219.234.18
202.219.234.30
202.219.234.42
202.219.234.54
202.219.234.66
202.219.234.78
202.219.234.90
202.219.234.102
202.219.234.114
202.219.234.126
202.219.234.138
202.219.234.150
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 08:56:44 | 显示全部楼层
sed -n '/HOSTNAME="delivery"/,/IPADDR=/p' * |grep "IPADDR" | cut -c60- | sed -e 's/"\/>//'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 09:01:41 | 显示全部楼层
sed -n '/HOSTNAME="delivery"/,/IPADDR=/p' * |grep "IPADDR" | perl -lne 'print $1 if /IPADDR="(.*)"/'

我觉得这个组合 很不错的
回复 支持 反对

使用道具 举报

发表于 2007-6-21 13:09:08 | 显示全部楼层
不知道你的文件的格式
如果是使用 sed -n '/HOSTNAME="delivery"/,/IPADDR=/p' *.xml | grep "IPADDR"
可以获取如下内容
<ifcfg DEVICE="eth1" HWADDR="00:14:22:18:F7:C5" IPADDR="202.219.234.18"/>
<ifcfg DEVICE="eth1" HWADDR="00:14:22:18:F4:FF" IPADDR="202.219.234.30"/>
<ifcfg DEVICE="eth1" HWADDR="00:16:E7:E4:7F:60" IPADDR="202.219.234.42"/>
<ifcfg DEVICE="eth1" HWADDR="00:16:E7:E4:3A:8F" IPADDR="202.219.234.54"/>

那么:
[color="Red"]sed -n '/HOSTNAME="delivery"/,/IPADDR=/p' *.xml | grep "IPADDR" [color="Blue"]| awk -F\" '{ print $6 }'
将会打印出所有的IPADDR
回复 支持 反对

使用道具 举报

发表于 2007-6-21 13:19:35 | 显示全部楼层
你还可以尝试
perl -lne 'print $1 if /IPADDR="(.*)"/' *.xml

看看是否也能够获取到正确的IP列表

因为不知道*.xml的文件格式,如果文件中只有 IPADDR="*" 这样的格式,而且那个*就是要提取出来的IP的话,那么用上面那个语句就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 13:24:57 | 显示全部楼层
多谢大家  多谢大家
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 13:35:22 | 显示全部楼层
原文件的局部内容
<host HOSTNAME="game4" group="game" kernel="pxeboot/vmlinuz-2.nodisk" mount="/export/game4" mountmode="rw">
                        <ifcfg DEVICE="eth0" HWADDR="00:12:B9:E3:B4:57"/>
                        <ifcfg DEVICE="BMC" HWADDR="00:00:00:00:00:00"/>
                </host>
                <host HOSTNAME="delivery" group="delivery" kernel="pxeboot/vmlinuz-2.6.nodisk" mount="/export/delivery" mountmode="rw" GATEWAY="45.231.23.1">
                        <ifcfg DEVICE="eth0" HWADDR="00:12:B9:E3:B3:B2"/>
                        <ifcfg DEVICE="eth1" HWADDR="00:12:B9:E3:B3:B4" IPADDR="45.231.23.129"/>
                        <ifcfg DEVICE="BMC" HWADDR="00:00:00:00:00:00"/>
                </host>
回复 支持 反对

使用道具 举报

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

本版积分规则

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