我们使用它返回的脚本,结果如下
<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 ,因为您可以看到所有东西都在一行中,没有空格或逗号。因此,我不知道如何得到这个短语,并将其设置为一个变量。
我用过
const=$(awk '/CONSULTA DE DEUDA CORRECTA/ ' output)
和
const=$(awk '/^CONSULTA DE DEUDA CORRECTA/ ' output)
但是,要么整个短语与我不需要的其他信息结合在一起,要么变量是空的。
任何帮助都很感激。
发布于 2020-08-27 11:24:44
由于这是对单个字符串的简单替换,因此比起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一起使用第3 arg来匹配():
$ awk 'match($0,"<mensaje>(.*)</mensaje>",a){print a[1]}' file
CONSULTA DE DEUDA CORRECTA.
发布于 2020-08-27 11:26:20
你能试一下吗。写在手机上,所以不能测试,不过应该能工作。
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)
https://stackoverflow.com/questions/63622595
复制