我们正在使用一个脚本,它会返回以下内容<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)
但要么整个短语与我不需要的其余信息一起出现,要么变量为空。
任何帮助表示赞赏。

最佳答案

由于这是对单个字符串的简单替换,因此它比awk脚本更适合sed脚本:

$ 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与第三个arg匹配():
$ awk 'match($0,"<mensaje>(.*)</mensaje>",a){print a[1]}' file
CONSULTA DE DEUDA CORRECTA.

10-04 18:22