2017-08-29 92 views
0

我想用awk在2個模式之間提取行,而模式作爲變量傳遞但它不適用於我。Linux:將var傳遞給awk無法正常工作

file.txt的內容:

[Data from server] 
line 1 
line 2 
line 3 

[Data from client] 
line 1 
line 2 
line 3 

不變量:
命令:awk 'BEGIN{IGNORECASE=1};/data/ && /server/{f=1} /^$/{f=0} f' file.txt

結果:

[Data from server] 
line 1 
line 2 
line 3 

隨着變量:

awk -v var=$myVar 'BEGIN{IGNORECASE=1};/data/ && /myVar/{f=1} /^$/{f=0} f' file.txt 

我得到空結果!

請幫

+0

不要使用「模式」一詞,因爲它是模棱兩可的 - 用whatev替換問題中的「模式」呃它是你的意思:'string'或'regexp'或其他東西。同時聲明是否只查找完全匹配或只是部分匹配。 –

回答

1

當您使用~操作,變量將得到解釋爲一個正則表達式:

$0 ~ variable 

($ 0是整行)

它應該是:

awk -v var="$myVar" 'BEGIN{IGNORECASE=1};/data/ && $0 ~ var{f=1} /^$/{f=0} f' file.txt 
+0

該命令返回:[從服務器數據] 線1條 線2 線3 [數據從客戶] 線1 線2 線3 –

+0

我有錯誤的變量名。編輯。 – hek2mgl

+0

非常感謝。工作:) –