使用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


以上是使用sed将字符串中的多次出现提取到数组中?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>