使用sed将字符串中的多次出现提取到数组中?
如何使用 sed 将所有匹配项放入 Bash 数组?
我的输入是
<node><system_id>app1261.works.com</system_id><name>app1261</name></node><node><system_id>app1361.works.com</system_id><name>app1361</name></node><node><system_id>app1461.works.com</system_id><name>app1461</name></node>
预期输出存储在数组中
app1261.works.com
app1361.works.com
app1461.works.com
我正在尝试下面的命令,但它总是返回最后一个匹配项而不是所有匹配项。
sed -ne '{s/.*<system_id>(.*)</system_id>.*/1/p;q;}' <<< "$xml"
谁能帮我这个?
回答
如果你有gnu grep然后使用这个基于环视的解决方案:
grep -Po '(?<=<system_id>)[^<>]+(?=</system_id>)' <<< "$xml
app1261.works.com
app1361.works.com
app1461.works.com
否则,一个grep + sed解决方案:
grep -Eo '<system_id>([^<>]+)</system_id>' <<< "$xml |
sed -E 's~</?system_id>~~g'
app1261.works.com
app1361.works.com
app1461.works.com