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

如何在Bash脚本中提取日志字符串的正则子串?

Bash日志子串提取方法

假设你要从示例字符串中提取2.6.1.566-978.7这个版本子串,以下是几种实用的Bash实现方式:

方法1:用grep的正则匹配

echo "TestingmkJHSBD,MFV from testing:2.6.1.566-978.7 testing" | grep -oP '(?<=testing:)[\d.-]+'
  • -o:只输出匹配到的子串,而非整行
  • -P:启用Perl兼容正则,(?<=testing:)是正向预查,确保只匹配testing:后面的版本字符(数字、点、连字符)

方法2:用sed做字符串替换

echo "TestingmkJHSBD,MFV from testing:2.6.1.566-978.7 testing" | sed 's/.*testing:\([\d.-]*\).*/\1/'
  • 正则.*testing:\([\d.-]*\).*匹配整行,捕获testing:后的版本部分,最后用\1替换整行,只保留捕获的子串

方法3:用awk分割字符串

echo "TestingmkJHSBD,MFV from testing:2.6.1.566-978.7 testing" | awk -F 'testing:' '{split($2, arr, " "); print arr[1]}'
  • -F 'testing:':以testing:为分隔符拆分字符串,取第二部分
  • split($2, arr, " "):把第二部分按空格拆分,取第一个元素就是目标版本

方法4:纯Bash参数扩展(无需外部工具)

log_str="TestingmkJHSBD,MFV from testing:2.6.1.566-978.7 testing"
# 截掉开头到"testing:"的所有内容
after_prefix=${log_str#*testing:}
# 截掉第一个空格到结尾的所有内容
target_substr=${after_prefix%% *}
echo $target_substr
  • ${str#*pattern}:删除字符串开头到第一个pattern的所有内容
  • ${str%%pattern*}:删除字符串从第一个pattern到结尾的所有内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:18:40