2

我在 bash 脚本中有以下代码

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

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

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

4

3 回答 3

2

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

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

另请注意,您的命令中有不必要的 cat 和 tail 管道。所有这些都可以在 awk 本身中完成,因此我重构了您的命令。

于 2013-04-13T09:05:21.873 回答
0

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

stat_pattern="POSITION_UPDATE \\\[ For INRecord \\\]"
于 2013-04-13T08:14:05.343 回答
0

您必须转义转义字符,如下所示:

stat_pattern='POSITION_UPDATE \\[ For INRecord \\]'
于 2013-04-13T08:10:25.150 回答