如何在awk模式搜索中包含“[”和“]”

时间:2013-04-13 08:01:07

标签: linux bash awk

我在bash脚本中有以下代码

stat_pattern="POSITION_UPDATE [ For INRecord ]"
cat my_file.txt | awk -v pattern="$stat_pattern" '$0 ~ pattern' | tail -n 1 

但它不会返回任何输出。 我用“[”也试过“\”。买它也没有帮助。

请告诉我如何将“[”“]”字符视为搜索字符串的一部分...

3 个答案:

答案 0 :(得分:2)

请记住,awk中的波形符号运算符~将匹配的字符串视为正则表达式,如果您有特殊的正则表达式字符([]在您的情况下)然后正则表达式匹配将失败。对于你的情况,最好使用awk function index(in, find)在另一个字符串中找到一个字符串,如下代码:

awk -v pattern="$stat_pattern" 'index($0, pattern) {line=$0} 
       END{print line}' my_file.txt 

另请注意,您的命令中有不必要的猫尾巴。所有这些都可以在awk中完成,因此我重构了你的命令。

答案 1 :(得分:0)

你必须逃避转义字符,如下所示:

stat_pattern='POSITION_UPDATE \\[ For INRecord \\]'

答案 2 :(得分:0)

你必须逃避'['和'\'所以它应该是

stat_pattern="POSITION_UPDATE \\\[ For INRecord \\\]"