1

我有一个长字符串,如下所示:

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 实现?

4

3 回答 3

3

GNU grep:

grep -oP '(?<=/yourid/)\d+' <<< "$string"
12345
34567
39201
于 2013-07-02T04:00:52.403 回答
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>")
于 2013-07-02T02:42:19.403 回答
1

使用 Perl:

declare -a ids
ids=( $(perl -lne 'while(m!yourid/(\w+)!g){print $1}' <<< "$string") )
echo ${ids[@]}
于 2013-07-02T02:42:42.963 回答