|
|||||||
| Forums | Search Forums | Register | Forum Rules | Man Pages | Albums | FAQ | Members | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
|
|
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Hi, I wish to grep for the first instance of <listen-address> value between the first <server></server> tag in an xml file. Sample xml: Code:
.........
<timeout-seconds>1500</timeout-seconds>
</jta>
<server>
<name>Adminserver_DEV</name>
<listen-address>myadminhost</listen-address>
</server>
<server>
<name>managed_core</name>
<listen-address>secondadminhost</listen-address>
<ssl>
<enabled>false</enabled>
......Desired Result: myadminhost If<listen-address></listen-address> is blank or not present in the first <server></server> tag then the desired result should be the hostname of the server excuting the script. Thank you.!! |
| Sponsored Links | ||
|
|
#2
|
|||
|
|||
|
Try Code:
awk -F "[<>]" '/listen-address/ && $3{print $3;exit}' file |
| Sponsored Links | ||
|
|
#3
|
|||
|
|||
|
First Occurance : Code:
sed -n -e 's/.*<listen-address>\(.*\)<\/listen-address>.*/\1/p' "Your_file.xml" | head -1 Nth Occurance : Code:
sed -n -e 's/.*<listen-address>\(.*\)<\/listen-address>.*/\1/p' "Your_file.xml" | head -n | tail -1 |
|
#4
|
|||
|
|||
|
Try this to print the listen-address in exactly the first <server>...</server> tag, or the hostname if missing/empty: Code:
awk 'BEGIN {"hostname" | getline HN}
/<\/server>/ {exit}
/<server>/ {s=1}
/<listen-address>/&& s {gsub (/<.?listen-address>| */, "")
LA = $0
}
END {print LA?LA:HN
}
' file
myadminhost |
| The Following User Says Thank You to RudiC For This Useful Post: | ||
mohtashims (02-15-2013) | ||
| Sponsored Links | |
|
|
#5
|
|||
|
|||
|
Quote:
1. I would like read the result in a variable (myhost) and 2. for another tag <listen-port> if missing in the first <server> tag then would like to assign "7001" to "myport" variable. |
| Sponsored Links | |
|
|
#6
|
|||
|
|||
|
Something like this: Code:
awk -F"[<->]" ' BEGIN { myh="";myp="7001" }
/<\/server>/ { exit }
/<server>/ { s = 1 ; }
s && /<listen-address>/ { myh=$3; }
/<listen-port>/ { myp=$3 ;}
END { print "host:"myh"\t port->"myp }' sample |
| Sponsored Links | |
|
|
#7
|
|||
|
|||
|
But will this populate the hostname command if <listen-address> tag is not found ?
|
| Sponsored Links | ||
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| XML - Split And Extract String between Chars | unme | Shell Programming and Scripting | 2 | 12-19-2012 04:43 AM |
| Extract Multivalue from XML | manas_ranjan | Shell Programming and Scripting | 4 | 01-09-2012 06:16 AM |
| Extract value from XML | manas_ranjan | Shell Programming and Scripting | 9 | 01-08-2012 01:23 AM |
| to extract string from main string and string comparison | vivek d r | Shell Programming and Scripting | 2 | 11-16-2011 07:17 AM |
| Grep a string from input file and delete next three lines including the line contains string in xml | greet_sed | Shell Programming and Scripting | 4 | 09-28-2011 05:18 AM |
|
|