我们正在使用一个脚本,它会返回以下
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><consultaDeudaResponse xmlns="http://www.example.org/webServicesvc-schema-services"><estado>120007</estado><mensaje>CONSULTA DE DEUDA CORRECTA.</mensaje><deudas><deuda><N>0</nisRad><secNis>1</secNis><nombre>TEST</nombre></env:Envelope>
我试图从awk中得到一个短语,上面写着CONSULTA DE DEUDA CORRECTA,因为你可以看到所有内容都在一行中,没有空格或逗号。所以我不知道如何得到这个短语并将其设置在一个变量中。
我使用
const=$(awk '/CONSULTA DE DEUDA CORRECTA/ ' output)
和
const=$(awk '/^CONSULTA DE DEUDA CORRECTA/ ' output)
但是,要么整个短语与我不需要的其他信息结合在一起,要么变量为空。
感谢您的帮助。
由于这是对单个字符串的简单替换,因此它是sed脚本比awk脚本更好的候选者:
$ sed -n 's:.*<mensaje>(.*)</mensaje>.*:1:p' file
CONSULTA DE DEUDA CORRECTA.
$ const=$(sed -n 's:.*<mensaje>(.*)</mensaje>.*:1:p' file)
$ echo "$const"
CONSULTA DE DEUDA CORRECTA.
如果你真的想使用awk,那么使用GNU awk来匹配第三个参数((:
$ awk 'match($0,"<mensaje>(.*)</mensaje>",a){print a[1]}' file
CONSULTA DE DEUDA CORRECTA.
请您尝试以下操作。写在手机上,所以无法测试它应该可以工作。
awk '
match($0,/<mensaje>.*</mensaje>){
print substr($0,RSTART+9,RLENGTH-19)
}' Input_file
或者在一个线性形式中使用:
var=$(awk 'match($0,/<mensaje>.*</mensaje>){print substr($0,RSTART+9,RLENGTH-19)}' Input_file)