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 シェルを介してどのように達成できますか?

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 に答える