我在尝试重写代码时遇到了这个错误。
此代码按预期工作:
#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"<")
答案 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"
然后询问您是否有疑问。我假设您对变量rohxml
和health
的使用超出了您发布的代码,否则您只需要:
wget -q -O- 'http://192.168.50.154/details.xml' |
awk -F'[<>]' '/<Health/{ print $3 }'