Skip to content

Instantly share code, notes, and snippets.

@agail
Last active May 19, 2021 19:45
Show Gist options
  • Save agail/c88785133f79db1dadba6c9f194522ff to your computer and use it in GitHub Desktop.
Save agail/c88785133f79db1dadba6c9f194522ff to your computer and use it in GitHub Desktop.
Simple xml parser
#!/bin/bash
#
# version: 0.02
# description: When you are limited to work w/o xpath.
#
# List regions:
# xmlparser [file] lsreg
#
# Get regions:
# xmlparser [file] getreg region
#
# Create sample.xml:
# xmlparser makesample
#
lsreg () {
echo cat "//Region/@Name"
}
getreg () {
echo cat "//Region[@Name=\"$1\"]/IpRange/@Subnet"
}
parse () {
$2 $3 | xmllint --shell $1 | sed -n 's/[^\"]*\"\([^\"]*\)\"[^\"]*/\1/gp' | sort -V
}
makesample () {
cat << EOF > sample.xml
<?xml version="1.0" encoding="utf-8"?>
<AzurePublicIpAddresses xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Region Name="australiac2">
<IpRange Subnet="13.104.158.224/27" />
<IpRange Subnet="20.36.64.0/19" />
</Region>
<Region Name="germanywc">
<IpRange Subnet="13.104.144.224/27" />
<IpRange Subnet="13.104.145.128/27" />
</Region>
<Region Name="japaneast">
<IpRange Subnet="13.71.128.0/19" />
<IpRange Subnet="13.73.0.0/19" />
</Region>
<Region Name="japanwest">
<IpRange Subnet="13.73.232.0/21" />
<IpRange Subnet="20.39.176.0/21" />
</Region>
<Region Name="usnorth">
<IpRange Subnet="13.105.26.0/24" />
<IpRange Subnet="13.105.37.64/26" />
</Region>
<Region Name="europenorth">
<IpRange Subnet="13.69.128.0/17" />
<IpRange Subnet="13.70.192.0/18" />
</Region>
<Region Name="southafrican">
<IpRange Subnet="13.104.158.128/27" />
<IpRange Subnet="13.104.158.160/28" />
</Region>
<Region Name="ussouth">
<IpRange Subnet="13.65.0.0/16" />
<IpRange Subnet="13.66.0.0/17" />
</Region>
<Region Name="uswestcentral">
<IpRange Subnet="13.71.192.0/18" />
<IpRange Subnet="13.77.192.0/19" />
</Region>
</AzurePublicIpAddresses>
EOF
}
if [ ! $1 ]; then sed -ne '/^#$/,/^$/p' $0
elif [ "$1" == "makesample" ]; then makesample
else parse $1 $2 $3
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment