首页 > 解决方案 > 从 1 行获取带有 awk 的字符串/短语

问题描述

我们正在使用一个脚本,它返回结果如下

<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)

但要么整个短语与我不需要的其余信息一起出现,要么变量为空。

任何帮助表示赞赏。

标签: linuxawk

解决方案


由于这是对单个字符串的简单替换,因此它比 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 来匹配第三个参数:

$ awk 'match($0,"<mensaje>(.*)</mensaje>",a){print a[1]}' file
CONSULTA DE DEUDA CORRECTA.

推荐阅读