Bash如何从日志字符串中提取error变量的对应值
日志error值提取解决方案
原命令失效原因
你编写的正则\d+ (error=?)要求匹配「数字 + 空格 + 带可选等号的error前缀」结构,但目标日志中error前缀前是冒号加空格,与正则规则不匹配,因此没有输出结果。
适配方案
方案1:Grep Perl正则方案(最简洁,推荐Linux环境使用)
利用\K语法忽略前置匹配内容,直接提取error后的数值:
echo "WARN (Periodic Recovery) IJ000906: error=15 check server.log" | grep -Po 'error=\K\d+'
输出结果为15,即error变量的取值。
参数说明:
-P开启Perl正则支持-o仅输出匹配到的内容error=\K\d+匹配error=前缀后,丢弃前缀内容,只返回后续的数字部分
方案2:Awk分隔方案(兼容性强,适配无Perl正则支持的环境)
通过两次分隔提取目标值:
echo "WARN (Periodic Recovery) IJ000906: error=15 check server.log" | awk -F'error=' '{split($2, arr, " "); print arr[1]}'
方案3:Sed替换方案
通过正则替换整行内容,仅保留目标数值:
echo "WARN (Periodic Recovery) IJ000906: error=15 check server.log" | sed -n 's/.*error=\([0-9]*\).*/\1/p'
内容的提问来源于stack exchange,提问作者Francesco Marchioni
相关产品推荐
相关产品推荐

