如何在awk的gsub中逃避“[”?

时间:2016-10-05 10:22:39

标签: bash awk gsub

我正在尝试解析以下日期时间部分 -

[Tue Oct  4 11:55:19 2016] [hphp] [25376:7f5d57bff700:279809:000001] [] \nFatal error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ')' in /var/cake_1.2.0.6311-beta/app/webroot/openx/www/delivery/postGetAd.php(12479)(62110d90541a84df30dd077ee953e47c) : eval()'d code on line 1

使用以下命令 -

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn -p /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log "^.*Fatal*" | awk '{print $1" "$2" "$3" "$4" "$5}' 

我得到以下输出(带括号[]) -

[Wed Oct 5 09:49:49 2016]

我想只获取日期时间部分,然后进行一些比较。请参阅我的其他问题Parsing lines from a log file containing date-time greater than something

我尝试使用gsub替换括号,但它给了我以下错误 -

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn -p /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log "^.*Fatal*" | awk '{ gsub("/\[\","T",$1); print $1" "$2" "$3" "$4" "$5}' 

输出 -

awk: (FILENAME=- FNR=1) fatal: Invalid regular expression: /[/

似乎我需要逃避[。我尝试使用\[但没有成功。输出 -

awk: warning: escape sequence `\[' treated as plain `['
awk: (FILENAME=- FNR=1) fatal: Invalid regular expression: /[/

2 个答案:

答案 0 :(得分:2)

如果使用/.../正则表达式语法,则可以使用单个反斜杠进行转义:

$ echo '[abc]' | awk '{ gsub(/\[/,"") }1'
abc]

或者你可以使用字符串文字语法,但是你需要一个额外的反斜杠,(因为当字符串被解析为正则表达式时,\\[成为所需的\[)。

$ echo '[abc]' | awk '{ gsub("\\[","") }1'
abc]

同样,要删除开始和结束括号:

$ echo '[abc]' | awk '{ gsub(/[\[\]]/,"") }1'
abc

$ echo '[abc]' | awk '{ gsub("[\\[\\]]","") }1'
abc

答案 1 :(得分:1)

echo "[Wed Oct 5 09:49:49 2016]"|tr -d '[]'