如何在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
相关产品推荐
相关产品推荐

