awk, sed or perl regexp to print values from file

Hello all

According to the following file (orignal one contains 200x times the same structure...) I was wondering if someone could help me to print <byte>??</byte> values

example, running this script/command like
./script.sh xxapp
I would expect as output: 102 116 112

./script.sh xxapp2
will print: 114 118
  <?xml version="1.0" encoding="UTF-8"?>
  <XmlProfile>
   <be.netbase.securitydaemon.xml.XmlProfile>
    <children length="480">
     <be.netbase.securitydaemon.xml.XmlProfile>
      <name><![CDATA[xxapp]]></name>
      <properties>
       <pair>
       ....
       </pair>
       <pair>
       ....
       </pair>
       <pair>
        <java.lang.String><![CDATA[userpassword]]></java.lang.String>
        <java.lang.reflect.Array dim="1" length="1" type="java.lang.Object">
         <java.lang.reflect.Array dim="1" type="byte">
          <byte><![CDATA[102]]></byte>
          <byte><![CDATA[116]]></byte>
          <byte><![CDATA[112]]></byte>
         </java.lang.reflect.Array>
        </java.lang.reflect.Array>
       </pair>
      </properties>
     </be.netbase.securitydaemon.xml.XmlProfile>
     <be.netbase.securitydaemon.xml.XmlProfile>
      <name><![CDATA[xxapp2]]></name>
      <properties>
      ...
        <java.lang.String><![CDATA[userpassword]]></java.lang.String>
        <java.lang.reflect.Array dim="1" length="1" type="java.lang.Object">
         <java.lang.reflect.Array dim="1" type="byte">
          <byte><![CDATA[114]]></byte>
          <byte><![CDATA[118]]></byte>
         </java.lang.reflect.Array>
        </java.lang.reflect.Array>
        <pair>
        ....
        </pair>
       ....
      </be.netbase.securitydaemon.xml.XmlProfile>
    ...
    etc...

Thanks in advance for your attention

Cheers :wink:

Try:

awk -F'[]]|CDATA[[]' '/<name>/{c=$2} c==n && /<byte>/{print $2}' n=xxapp2 infile
1 Like

This is great Scrutinizer, thank you again for your precious help!