我在 bash 脚本中有以下代码
stat_pattern="POSITION_UPDATE [ For INRecord ]"
cat my_file.txt | awk -v pattern="$stat_pattern" '$0 ~ pattern' | tail -n 1
但它不返回任何输出。我也用“[”尝试了“\”。买它也没有帮助。
请告诉我如何将“[”“]”字符视为搜索字符串的一部分...
请记住 awk 中的波浪号运算符~
将匹配字符串视为正则表达式,如果您有特殊的正则表达式字符(在您的情况下) [
,]
那么正则表达式匹配将失败。对于您的情况,最好使用awk 函数 index(in, find)在另一个字符串中查找字符串,如下代码:
awk -v pattern="$stat_pattern" 'index($0, pattern) {line=$0}
END{print line}' my_file.txt
另请注意,您的命令中有不必要的 cat 和 tail 管道。所有这些都可以在 awk 本身中完成,因此我重构了您的命令。
你必须逃避 '[' 和 '\' 所以它应该是
stat_pattern="POSITION_UPDATE \\\[ For INRecord \\\]"
您必须转义转义字符,如下所示:
stat_pattern='POSITION_UPDATE \\[ For INRecord \\]'