i have bash-script:
#!/bin/bash -e contents=`echo "$(<testdoc.xml)"` regex='(?<=name=")(.+)">(.+)(?=<\/block)' line in $contents [[ $line =~ $regex ]] blockname="${bash_rematch[1]}" blockversion="${bash_rematch[2]}" echo $blockname echo $blockversion done testdoc.xml contents this:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <domainmanifest> <blocks> <block name="wpf">wpf-13 31.10.2012 / 09:06:55</block> <block name="vsh">vsh-08 30.10.2012 / 09:12:06</block> <block name="vbn">vbn-14 15.06.2015 / 13:29:16</block> <block name="rmv">rmv-27 07.07.2015 / 10:52:57</block> <block name="zrl">zrl-12 01.07.2011 / 09:23:25</block> <block name="nph">nph-05 07.07.2008 / 09:36:32</block> <block name="vdv">20150630</block> <block name="verbundmetainfo.properties">22.06.2015</block> </blocks> </domainmanifest> when try out regex on https://regex101.com/ said contents works charm. doing wrong? must in bash no?
edit:
script looks this:
#!/bin/bash regex='(?<=name=")(.+)">(.+)(?=<\/block)' while read line echo $line [[ $line =~ $regex ]] blockname="${bash_rematch[1]}" blockversion="${bash_rematch[2]}" echo $blockname echo $blockversion done <$1 which @ least returns lines correctly, yet regex not returning anything. ideas?
edit2:
got working grep , 2 separate regexes:
#!/bin/bash regex_name='(?<=name=")(.+)(.+)(?=">)' regex_version='(?<=">)(.+)(?=<\/block)' while read line echo $line | grep -op $regex_name echo $line | grep -op $regex_version done <$1
in bash, loops on strings split on spaces, unless engage in quoting, isn't appropriate file input. want instead more like:
while read line; [[ $line =~ $regex ]] blockname="${bash_rematch[1]}" blockversion="${bash_rematch[2]}" echo $blockname echo $blockversion done <testdoc.xml good luck!
Comments
Post a Comment