AWK匹配在本地工作但不在debian服务器上的bash

时间:2016-02-04 17:51:15

标签: linux bash awk

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

Textfile看起来像(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

1 个答案:

答案 0 :(得分:3)

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

它适用于Gawk(GNU Awk),这可能就是你在本地安装的。

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

  • Gawk:match(s, r [, a])
  • Mawk(和BSD Awk,以及POSIX):match(s, r)

Ed Morton,在清理后的评论中,建议使用以下命令变体,该变体应与所有 Awks一起使用:

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