2016-02-04 44 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

相關問題