flyfeel 发表于 2014-07-14 20:11

python如何实现awk里域的操作??

'DefaultIPGatewayDNSServerSearchOrder                IndexIPAddress                                        IPSubnet               

{"192.190.10.1"}{"202.106.46.151", "202.106.0.20"}7      {"192.190.10.104", "fe80::38eb:3ea0:bb57:b717"}{"255.255.255.0", "64"}
python如何实现如上按照域(列)的方式取值??
即DefaultIPGateway= 192.190.10.1
………………
以此类推

flyfeel 发表于 2014-07-14 20:14

本人python新手,本来准备老老实实的用split搞,但发现太麻烦太笨了,一时就想起了awk的域,所以想问问在python中如何快速的实现如上取值?

Perl_Er 发表于 2014-07-14 20:17

回复 2# flyfeel


    你awk是怎么实现的?

flyfeel 发表于 2014-07-14 20:36

我的意思是如果直接将第二行用split()分割,会变成8个域,因为部分{}中也含有空格,所以简单用1个或多个空格使用问题的,没有awk的域来的快。['{"192.190.10.1"}', '{"202.106.46.151",', '"202.106.0.20"}', '7', '{"192.190.10.104",', '"fe80::38eb:3ea0:bb57:b717"}', '{"255.255.255.0",', '"64"}']

flyfeel 发表于 2014-07-14 20:52

补充一下,如果DNS只有一个的时候list的长度又变成7个了,没配IPv6又变成5个了,还不好写死取值。

Perl_Er 发表于 2014-07-14 20:54

回复 4# flyfeel


    格式都固定的话大概这样咯#!/usr/bin/python
import re

#'DefaultIPGateway   DNSServerSearchOrder   Index   IPAddress    IPSubnet               
str = '{"192.190.10.1"}{"202.106.46.151", "202.106.0.20"}7 {"192.190.10.104", "fe80::38eb:3ea0breakb57break717"}{"255.255.255.0", "64"}'

searchObj = re.search( r'\{"(.*)"\}\s+\{"(.*)"\}.* (\d) .*\{"(.*)"\} .*\{"(.*)"\}', str)

for item in searchObj.groups():
    print item

flyfeel 发表于 2014-07-15 01:41

多谢楼上回复,思路很好用正则匹配确实简单,多谢了

q1208c 发表于 2014-07-15 08:11

目测这是前面的 python程序的输出, 为啥不直接用一个数组收下来, 不就OK了?

flyfeel 发表于 2014-07-15 09:53

这是Popen系统调用的(wmic)输出,已经按正则的思路处理了,谢谢各位
页: [1]
查看完整版本: python如何实现awk里域的操作??