【问题标题】:How to use grep command to print value of a variable in a line?如何使用 grep 命令在一行中打印变量的值?
【发布时间】:2014-12-16 12:30:15
【问题描述】:

例如,考虑下面一行

<WORKFLOWLINK CONDITION ="" FROMTASK ="Start" TOTASK ="cmd_START_RUN"/>

从上面的行开始,我需要使用 grep 命令或任何命令从 FROMTASK ="Start" 打印 Start

【问题讨论】:

  • 如果这是关于“解析” XML,那么答案是使用 xml 解析工具。像 perl、python、ruby 等或者使用像 xsltproc 或 XMLStarlet 这样的工具。
  • ksh:xmllint:未找到。错误

标签: bash shell unix sh scripting-language


【解决方案1】:

尝试这样做:

$ xmllint --xpath 'string(//WORKFLOWLINK/@FROMTASK)' file
Start

$ xmlstarlet sel -t -v 'string(//WORKFLOWLINK/@FROMTASK)' file
Start

$ saxon-lint --xpath 'string(//WORKFLOWLINK/@FROMTASK)' file
Start

【讨论】:

  • ksh: xmllint: 未找到。
  • 也许您需要安装它或使用其他工具?
【解决方案2】:

如果您只想要FROMTASK 的值,或者一些固定变量,请尝试sed

sed -nre 's/^.*FROMTASK *= *"([^"]*)".*$/\1/p' file

如果您想获取任何变量的值,请尝试xmllint as sputnick 回答

使用sudo apt-get install libxml2-utils(debian) 或yum install libxml2-utils 安装。

【讨论】:

    【解决方案3】:

    由于您的标签不建议这是关于 XML,只需使用 cut 命令

    cut -d "\"" -f4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2017-01-28
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      相关资源
      最近更新 更多