grep& wget在冲突中通过变量

时间:2017-10-04 12:03:42

标签: xml bash variables grep wget

我在尝试重写代码时遇到了这个错误。

此代码按预期工作:

#XML downloading
wget -q http://192.168.50.154/details.xml -O details.xml

#load XML in Variable
rohxml=details.xml

#Read Data and save to Variable
health=$(grep '<Health' $rohxml | cut -f2 -d">"|cut -f1 -d"<")

但是当我尝试将其直接保存到变量中时(因为我无法在新服务器中保存新文件),它会抛出以下错误:

  

grep:无效选项 - &#39; O&#39;   用法:grep [OPTION] ... PATTERN [FILE] ...   试试grep --help&#39;了解更多信息。

这是&#34;新&#34;代码:

#load XML in Variable
ABFRAGE="'wget -q -O- http://192.168.50.154/details.xml'"
rohxml=$ABFRAGE

#Read Data and save to Variable
health=$(grep '<Health' $rohxml | cut -f2 -d">"|cut -f1 -d"<")

3 个答案:

答案 0 :(得分:2)

您存储了字符串

'wget -q -O- http://192.168.50.154/details.xml'
$ rohxml变量中的

,而不是命令的输出。使用反引用来存储输出。

此外,要从XML中提取信息,请使用XML感知工具。对于简单查询,xmllint应该可以正常运行。

答案 1 :(得分:0)

我刚刚重新编写了我的代码,现在只需使用以下内容即可正常工作

wget -O - -o /dev/null  http://192.168.50.154/details.xml | sed -n 's:.*<Health>\(.*\)</Health>.*:\1:p'

答案 2 :(得分:0)

你对shell如何工作有一些基本的误解。试试这个:

rohxml="$( wget -q -O- 'http://192.168.50.154/details.xml' )"
health="$( awk -F'[<>]' '/<Health/{ print $3 }' <<<"$rohxml" )"
printf 'health="%s"\n' "$health"

然后询问您是否有疑问。我假设您对变量rohxmlhealth的使用超出了您发布的代码,否则您只需要:

wget -q -O- 'http://192.168.50.154/details.xml' |
awk -F'[<>]' '/<Health/{ print $3 }'