2017-08-29 97 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

非常感谢。工作:) –