【问题标题】:Bash - How to split a string with multiple wordsBash - 如何用多个单词分割字符串
【发布时间】:2013-06-29 06:50:34
【问题描述】:

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

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

【问题讨论】:

  • bash 可能是一个糟糕的选择。如果可以,请使用支持 XML 的语言,例如 Perl、Python 或 TCL。

标签: string bash shell loops


【解决方案1】:

使用 Perl:

declare -a ids
ids=( $(perl -lne 'while(m!yourid/(\w+)!g){print $1}' <<< "$string") )
echo ${ids[@]}

【讨论】:

    【解决方案2】:

    GNU grep:

    grep -oP '(?<=/yourid/)\d+' <<< "$string"
    
    12345
    34567
    39201
    

    【讨论】:

      【解决方案3】:

      使用真正的 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>")
      

      【讨论】:

      • +1 xmlstarlet 可能不太可能安装,但您可以在命令行上使用临时 xpath 表达式很方便。 AFAIK,xsltproc 要求您使用样式表文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2013-11-15
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      相关资源
      最近更新 更多