Bash - 如何拆分包含多个单词的字符串

时间:2013-07-02 02:30:36

标签: string bash shell loops

我有一个很长的字符串如下:

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实现这一目标?

3 个答案:

答案 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[@]}