我有一个很长的字符串如下:
string='<span id="/yourid/12345" class="noname">lala1</span><span id="/yourid/34567" class="noname">lala2</span><span id="/yourid/39201" class="noname">lala3</span>'
目标是遍历每个'yourid'并回显id 12345,34567和39201以进行进一步处理。如何通过bash shell实现这一目标?
答案 0 :(得分:3)
GNU grep:
grep -oP '(?<=/yourid/)\d+' <<< "$string"
12345
34567
39201
答案 1 :(得分:2)
使用真正的XML解析器。例如,如果您安装了XMLStarlet ......
while read -r id; do
[[ $id ]] || continue
printf '%s\n' "${id#/yourid/}"
done < <(xmlstarlet sel -m -t '//span[@id]' -v ./@id -n <<<"<root>${string}</root>")
答案 2 :(得分:1)
使用Perl:
declare -a ids
ids=( $(perl -lne 'while(m!yourid/(\w+)!g){print $1}' <<< "$string") )
echo ${ids[@]}