awk '{ gsub(/^[ \t]+|[ \t\r]+$/, ""); } /<\/context-root>/ { p = 0 }; p; /<context-root>/ { p = 1 }' file
输出:
/XYZ
更新
#!/usr/bin/awk -f
{
gsub(/^[ \t]+|[ \t\r]+$/, "")
}
match($0, /^[^<]*<\/context-root>/) {
if (p) {
t = substr($0, 1, index($0, "</context-root>") - 1)
if (length(t)) print t
}
$0 = substr($0, RSTART + RLENGTH)
p = 0
}
{
while (match($0, /<context-root>[^<]*<\/context-root>/)) {
t = substr($0, RSTART, RLENGTH)
gsub(/<\/?context-root>/, "", t)
print t
$0 = substr($0, RSTART + RLENGTH)
}
}
p
match($0, /<context-root>/) {
t = substr($0, RSTART + RLENGTH)
if (length(t)) print t
p = 1
}
另一个版本:
#!/usr/bin/awk -f
function strip(t) {
gsub(/^[ \t]+|[ \t\r]+$/, "", t)
return t
}
match($0, /^[^<]*<\/context-root>/) {
if (p) {
t = strip(substr($0, 1, index($0, "</context-root>") - 1))
if (length(t)) print t
}
$0 = substr($0, RSTART + RLENGTH)
p = 0
}
{
while (match($0, /<context-root>[^<]*<\/context-root>/)) {
t = substr($0, RSTART, RLENGTH)
gsub(/<\/?context-root>/, "", t)
if (length(t)) print t
$0 = substr($0, RSTART + RLENGTH)
}
}
p {
print strip($0)
}
match($0, /<context-root>/) {
t = strip(substr($0, RSTART + RLENGTH))
if (length(t)) print t
p = 1
}
输入:
<context-root>
A B
</context-root>
<context-root>C D</context-root><context-root>E F</context-root><context-root>G H
I J</context-root>
输出:
A B
C D
E F
G H
I J