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

如何在Bash中获取字符串内子串最后一次出现位置前的6个字符

实现方案

你可以用GNU grep的PCRE正则模式实现需求,示例命令如下:

# 测试用的输入字符串
variable="info 1 keyword info 2 keyword info 3 789 info 4 keyword extra text..."
# 指定要匹配的关键词
keyword="keyword"

# 执行提取命令
echo "$variable" | grep -oP ".{6}(?=$keyword(?!.*$keyword))"

执行上述命令后直接输出结果:info 4

命令说明

  • -P 开启PCRE(Perl兼容正则表达式)支持
  • -o 仅输出正则匹配到的内容
  • 正则逻辑:
    • (?=$keyword(?!.*$keyword)) 是正向零宽断言,定位到最后一次出现关键词的前侧位置((?!.*$keyword)确保后面不会再出现相同关键词)
    • .{6} 匹配上述定位位置往前的6个字符

如果你的环境没有GNU grep,也可以用sed实现:

echo "$variable" | sed -E "s/.*(.{6})$keyword[^$keyword]*$/\1/"

如果需要兼容关键词前不足6个字符的场景,把正则中的.{6}替换为.{0,6}即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:03