微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-AWK匹配在本地工作,但在Debian服务器上不支持bash

我有以下奇怪的问题.
我将尝试使用awk从文本文件提取字符串,但在服务器上的bash上无法使用.

文本文件看起来像(textfile.txt)

dummy text name="formtoken" value="bd54839c3348d1c6ed7ab2c266f8a50b" dummy text

我想从文件获取formtoken值.我的awk语句是:

awk '/formtoken/ {match($0,/name="formtoken" value="(.{32})"/,arr); print arr[1]}' < textfile.txt

本地命令结果为“ bd54839c3348d1c6ed7ab2c266f8a50b”

在debian服务器上(通过ssh连接),我得到“ awk:第1行:在或附近出现语法错误

也许有人对我有很好的提示:)

谢谢,

RCX

解决方法:

基于Debian的发行版使用Mawk作为认awk,并且您的命令不适用于Mawk.

它可以与Gawk(GNU Awk)一起使用,这可能是您在本地安装的.

您的命令不适用于Mawk的原因是您使用match()函数的3参数形式,它是Gawk扩展;功能签名是:

> Gawk:匹配项(s,r [,a])
> Mawk(以及BSD Awk和POSIX):match(s,r)

Ed Morton一个经过清理的注释中,建议使用以下命令变体,该变体应适用于所有Awks:

awk 'sub(/.*name="formtoken" value="/,""){ sub(/".*/,""); print}' textfile.txt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐