如何在awk中忽略双引号匹配指定字符串模式?
如何在awk中忽略双引号匹配目标模式?
嘿,我来帮你搞定这个awk匹配的问题~你想要匹配Backing up "/1/2" on One这个模式,但希望不管有没有双引号都能匹配到,对吧?其实很简单,只要在正则表达式里把双引号的位置改成可选匹配就行。
核心修改点
在awk的正则中,"?表示该位置可以有0个或1个双引号,这样就能忽略双引号的存在与否,精准匹配目标内容。另外要注意,路径里的/是awk正则的分隔符,所以需要转义成\/,避免语法错误。
修改后的完整命令
awk -F"[.: ]" '/Backing up "?\/1\/2"? on One/ {start = mktime($3" "$2" "$1" "$4" "$5" "$6); hms = sprintf("%s:%s:%s,", $4, $5, $6);} / Backup completed/ {end = mktime($3" "$2" "$1" "$4" "$5" "$6); if (end) {print hms end - start; start = ""; }}' logs.txt
额外优化(可选)
如果你觉得转义/很麻烦,可以改用awk的匹配操作符~,并自定义正则分隔符(比如@),这样就不用转义路径里的/了,代码会更清晰:
awk -F"[.: ]" '$0 ~ @Backing up "?/1/2"? on One@ {start = mktime($3" "$2" "$1" "$4" "$5" "$6); hms = sprintf("%s:%s:%s,", $4, $5, $6);} / Backup completed/ {end = mktime($3" "$2" "$1" "$4" "$5" "$6); if (end) {print hms end - start; start = ""; }}' logs.txt
这样修改后,不管日志里的行是带双引号的Backing up "/1/2" on One,还是不带双引号的Backing up /1/2 on One,都能被正确匹配到啦~
内容的提问来源于stack exchange,提问作者Kaverappa KU
相关产品推荐
相关产品推荐

