You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

awk匹配字符串反斜杠问题:筛选特定路径并输出路径与SHA1

问题与解决方案

问题场景

给定日志文件内容:

  1. 2023-12-24T07:00:00 2152 4078 information.cp 253 TEST Verifying certificate completed for 'C:\Windows\Temp\test file1.exe', SHA1: 'efdfe54bce9edc227bee03bc61cbfaa8b3c754ee' lookup took: '57969' nanoseconds,
  2. 2023-12-24T08:00:00 2152 4078 information.cp 253 TEST Verifying certificate completed for 'C:\Microsoft\testfile2.exe', SHA1: 'ffdfe54bce9edc227bee03bc61cbfaa8b3c754dd' lookup took: '57970' nanoseconds,

需求:仅提取文件路径包含Microsoft或Windows\Temp的条目,输出对应文件路径和SHA1值。

原执行命令及报错:

awk -F\' '($2 ~ (Microsoft || Windows\\Temp) {print $2, $4}' file

报错信息:

awk: syntax error at source line 1
context is
$2 ~ (Microsoft || >>> Windows\ <<< \Temp) {print $2, $4}
awk: bailing out at source line 1

错误原因

  1. 正则语法错误:awk多条件匹配需用/pattern1|pattern2/格式,不能直接用(A || B)的写法;
  2. 反斜杠转义问题:shell和awk层面都需要对反斜杠转义,原命令的转义层级不足;
  3. 括号不匹配:原命令中($2 ~ ...)缺少闭合右括号。

修正后的命令

方案1:正则匹配(推荐)

awk -F\' '$2 ~ /Microsoft|Windows\\\\Temp/ {print $2, $4}' file
  • -F\':以单引号为分隔符,确保$2对应文件路径、$4对应SHA1值;
  • /Microsoft|Windows\\\\Temp/:\\\\经过shell转义后传递给awk为\\,awk正则中再转义一次得到\,匹配日志里的路径分隔符;
  • 去掉冗余括号,简化语法。

方案2:字符串匹配(更直观)

awk -F\' 'index($2, "Microsoft") != 0 || index($2, "Windows\\Temp") != 0 {print $2, $4}' file
  • index($2, "str")返回字符串str在$2中的起始位置,不为0则表示存在该子串;
  • Windows\\Temp经shell转义后,awk中得到Windows\Temp,直接匹配目标路径。

执行结果

C:\Windows\Temp\test file1.exe efdfe54bce9edc227bee03bc61cbfaa8b3c754ee
C:\Microsoft\testfile2.exe ffdfe54bce9edc227bee03bc61cbfaa8b3c754dd

内容的提问来源于stack exchange,提问作者ghostrider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:53:21