忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 442 | 回复: 7

[文本处理] 获取匹配字符之间的部分数值 [复制链接]

论坛徽章:
0
发表于 2017-07-15 08:50 |显示全部楼层
  1. ......
  2. <link href="https://12.32.113.32:8281/vco/api/catalog/VC/VirtualMachine/192.168.5.121%252Fvm-91/" rel="down">
  3.     <attributes>
  4.       <attribute name="vimHost" value="https://192.168.5.121:443/sdk"/>
  5.       <attribute name="connectionState" value="connected"/>
  6.       <attribute name="totalStorage" value="90266 MB"/>
  7.       <attribute name="state" value="poweredOff"/>
  8.       <attribute name="type" value="VirtualMachine"/>
  9.       <attribute name="id" value="vm-91"/>
  10.       <attribute name="annotation" value=""/>
  11.       <attribute name="hostMemoryUsage" value="0 MB"/>
  12.       <attribute name="vmVersion" value="vmx-11"/>
  13.       <attribute name="overallCpuUsage" value="0 MHz"/>
  14.       <attribute name="name" value="Win2012R2CN_OS"/>
  15.       <attribute name="vmToolsVersionStatus" value="guestToolsCurrent"/>
  16.       <attribute name="unsharedStorage" value="32198 MB"/>
  17.       <attribute name="@type" value="VirtualMachine"/>
  18.       <attribute name="cpu" value="8 vCPUs"/>
  19.       <attribute name="dunesId" value="192.168.5.121/vm-91"/>
  20.       <attribute name="vmToolsStatus" value="guestToolsNotRunning"/>
  21.       <attribute name="memoryOverhead" value="0.0 MB"/>
  22.       <attribute name="memory" value="8192 MB"/>
  23.       <attribute name="productfullVersion" value=""/>
  24.       <attribute name="guestMemoryUsage" value="0 MB"/>
  25.       <attribute name="productVendor" value=""/>
  26.       <attribute name="isOS" value="false"/>
  27.       <attribute name="committedStorage" value="32198 MB"/>
  28.       <attribute name="productName" value=""/>
  29.       <attribute name="guestOS" value="Microsoft Windows Server 2012 (64-bit)"/>
  30.     </attributes>
  31.   </link>
  32.   <link href="https://12.32.113.32:8281/vco/api/catalog/VC/VirtualMachine/192.168.5.121%252Fvm-148/" rel="down">
  33.     <attributes>
  34.       <attribute name="vimHost" value="https://192.168.5.121:443/sdk"/>
  35.       <attribute name="connectionState" value="connected"/>
  36.       <attribute name="unsharedStorage" value="2404 MB"/>
  37.       <attribute name="totalStorage" value="53410 MB"/>
  38.       <attribute name="@type" value="VirtualMachine"/>
  39.       <attribute name="state" value="poweredOff"/>
  40.       <attribute name="cpu" value="1 vCPUs"/>
  41.       <attribute name="dunesId" value="192.168.5.121/vm-148"/>
  42.       <attribute name="vmToolsStatus" value="guestToolsNotRunning"/>
  43.       <attribute name="type" value="VirtualMachine"/>
  44.       <attribute name="memoryOverhead" value="0.0 MB"/>
  45.       <attribute name="memory" value="2048 MB"/>
  46.       <attribute name="id" value="vm-148"/>
  47.       <attribute name="annotation" value=""/>
  48.       <attribute name="vmVersion" value="vmx-11"/>
  49.       <attribute name="hostMemoryUsage" value="0 MB"/>
  50.       <attribute name="overallCpuUsage" value="0 MHz"/>
  51.       <attribute name="guestMemoryUsage" value="0 MB"/>
  52.       <attribute name="name" value="CentOS6U6X64_OS"/>
  53.       <attribute name="hostName" value="localhost.localdomain"/>
  54.       <attribute name="isOS" value="false"/>
  55.       <attribute name="committedStorage" value="2404 MB"/>
  56.       <attribute name="guestOS" value="CentOS 4/5/6/7 (64-bit)"/>
  57.       <attribute name="vmToolsVersionStatus" value="guestToolsNeedUpgrade"/>
  58.     </attributes>
  59.   </link>
  60.   <link href="https://12.32.113.32:8281/vco/api/catalog/VC/VirtualMachine/192.168.5.121%252Fvm-92/" rel="down">
  61.     <attributes>
  62.       <attribute name="vimHost" value="https://192.168.5.121:443/sdk"/>
  63.       <attribute name="connectionState" value="connected"/>
  64.       <attribute name="totalStorage" value="90262 MB"/>
  65.       <attribute name="state" value="poweredOff"/>
  66.       <attribute name="type" value="VirtualMachine"/>
  67.       <attribute name="id" value="vm-92"/>
  68.       <attribute name="annotation" value=""/>
  69.       <attribute name="hostMemoryUsage" value="0 MB"/>
  70.       <attribute name="vmVersion" value="vmx-11"/>
  71.       <attribute name="overallCpuUsage" value="0 MHz"/>
  72.       <attribute name="name" value="Win2008R2CN_OS"/>
  73.       <attribute name="vmToolsVersionStatus" value="guestToolsCurrent"/>
  74.       <attribute name="unsharedStorage" value="34582 MB"/>
  75.       <attribute name="@type" value="VirtualMachine"/>
  76.       <attribute name="cpu" value="4 vCPUs"/>
  77.       <attribute name="dunesId" value="192.168.5.121/vm-92"/>
  78.       <attribute name="vmToolsStatus" value="guestToolsNotRunning"/>
  79.       <attribute name="memoryOverhead" value="0.0 MB"/>
  80.       <attribute name="memory" value="8192 MB"/>
  81.       <attribute name="productfullVersion" value=""/>
  82.       <attribute name="guestMemoryUsage" value="0 MB"/>
  83.       <attribute name="productVendor" value=""/>
  84.       <attribute name="isOS" value="false"/>
  85.       <attribute name="committedStorage" value="34582 MB"/>
  86.       <attribute name="productName" value=""/>
  87.       <attribute name="guestOS" value="Microsoft Windows Server 2008 R2 (64-bit)"/>
  88.     </attributes>
  89.   </link>
  90. ......
复制代码


部分文本内容如上,我想在介乎字符"<link"和"</link>"之间内容获取有匹配关键字"name="dunesId""和"name="name""的行的value值,然后按照这样的格式输出:
192.168.5.121/vm-148,CentOS6U6X64_OS
192.168.5.121/vm-92,Win2008R2CN_OS
....


谢谢。


论坛徽章:
302
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-15 12:11 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-15 12:12 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my $flag = 0;
  5. my @aData = ();

  6. while(<>){
  7.         if(/\A\s*<link/){
  8.                 $flag = 1;
  9.                 next;
  10.         }
  11.         next if(!$flag);        
  12.         if(/\A\s*<\/link/){
  13.                 if(@aData == 2){
  14.                         print(join(',', sort {$a cmp $b} @aData), "\n");
  15.                 }
  16.                 $flag = @aData = ();
  17.                 next;
  18.         }
  19.         push(@aData, /\bvalue="([^"]+)"/) if(/\bname="(?:dunesId|name)"/);
  20. }
复制代码


perl abc.pl f

论坛徽章:
38
辰龙
日期:2013-08-21 15:45:19寅虎
日期:2014-06-09 12:52:17双鱼座
日期:2014-06-10 12:42:44巨蟹座
日期:2014-06-12 23:17:17戌狗
日期:2014-06-17 09:53:29未羊
日期:2014-10-10 13:45:41申猴
日期:2015-03-03 17:21:37亥猪
日期:2015-03-03 17:22:002015亚冠之广州富力
日期:2015-05-12 16:34:522015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:08平安夜徽章
日期:2015-12-26 00:06:30
发表于 2017-07-15 15:06 |显示全部楼层
awk -F 'name="dunesId" +value=|name="name" +value='   '/<link/{p=1} p && NF==2{a=/dunesId/?$NF","a:a $NF}   /<\/link/  && a {print gensub(/["\/>]/,"","g",a);a=p=""}'   urfile

论坛徽章:
112
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2017-07-15 16:35 |显示全部楼层
回复 1# netocool

WYTIWYC (What You Think Is What You Code)

$ awk '/<link/{k=1}/\/link/{print a["dunesId"]","a["name"];delete a;k=0}k&&match($0,"name=\"([^\"]+)\" value=\"([^\"]+)\"",m){a[m[1]]=m[2]}' FILE
192.168.5.121/vm-91,Win2012R2CN_OS
192.168.5.121/vm-148,CentOS6U6X64_OS
192.168.5.121/vm-92,Win2008R2CN_OS

$ awk '/<link/{k=1}/\/link/{print a["id"]","a["vmVersion"];delete a;k=0}k&&match($0,"name=\"([^\"]+)\" value=\"([^\"]+)\"",m){a[m[1]]=m[2]}' FILE
vm-91,vmx-11
vm-148,vmx-11
vm-92,vmx-11

论坛徽章:
302
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-15 19:07 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-17 14:37 编辑
  1. #PowerShell Codes:

  2. $regex = [regex] "\b(?<R>name)=""(?:dunesId|\k<R>)"".*?\bvalue=""(?<V>[^""]+)"""
  3. $slurp = Get-Content -Encoding UTF8 -Raw -Path wkPath:\urFile
  4. foreach($section in $slurp -split "(?=</link)"){
  5.     $list = @()
  6.     $regex.Matches($section) | % -Process{
  7.         foreach($m in $_){
  8.             $list += $m.Groups["V"].Value
  9.         }
  10.     }
  11.     if($list.Count -lt 2){
  12.         continue
  13.     }
  14.     Write-Host (($list | sort-object {$_}) -join ",")
  15. }
复制代码



修正一下,我当时书写表达式的时候也相当的郁闷。
  1. $regex = [regex] '\b(?<R>name)="(?:dunesId|\k<R>)".*?\bvalue="(?<V>[^"]+)"'
复制代码

论坛徽章:
0
发表于 2017-07-15 21:54 |显示全部楼层
林子大,啥人才都有

论坛徽章:
26
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之青岛
日期:2016-11-26 17:00:4615-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:54
发表于 2017-07-16 17:25 |显示全部楼层

  1. awk -F\" '/<link /{f=1}f{if($2=="dunesId"||$2=="name"){a[$2]=$4;if(length(a)==2){print a["dunesId"]","a["name"];delete a;f=0}}}' file
复制代码

论坛徽章:
0
发表于 2017-07-17 13:41 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2017-07-17 15:41 编辑

回复 5# sunzhiguolu

我擦,太牛了,看到你写的第三行,我就要吐血。

再写个这样的:

xml
http://bbs.chinaunix.net/thread-4259293-1-1.html
http://bbs.chinaunix.net/thread-4261462-1-1.html


不管林子大小,ps管理虚拟机也应该在前三。在我看应该是魁首!
powershell 管理 vmware vsphehe
https://www.vmware.com/support/developer/PowerCLI/PowerCLI651/html/


林子大了,什么鸟(脚本语言)都有。
我看bash能称王,是孔雀。powershell也能,是凤凰。它俩都是百鸟之王。都是 主流鸟, 而py,perl则是杂毛鸟。


凭什么?
就凭ps
1有命令行。
2有管道。
3有ssh远程运行命令,脚本,远程传值。多线程远程。

py,perl有吗?





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

本版积分规则

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP