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

但是,要么整个短语与我不需要的其他信息结合在一起,要么变量为空。

感谢您的帮助。

由于这是对单个字符串的简单替换,因此它是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)

最新更新