2016-02-04 41 views
3

我有以下奇怪的问题。 我会尝试从awk文本文件中提取一个字符串,但它不适用于我的服务器上的bash。AWK匹配本地工作,但不在bash上debian服务器上

文本文件看起来像(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

回答

3

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

它与Gawk(GNU Awk)协同工作,这可能是您在本地安装的。

您的命令不能与Mawk一起工作的原因是您正在使用match()函数的参数形式,即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 
+1

感谢您的帮助和两种不同awk实现之间的良好解释。 @EdMortion你的发言作品很不错:) – RCX

相关问题