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

如何让grep匹配最后一个${A57}至${A29}${A14}的内容?

解决方案:用grep匹配最后一个${A57}到指定结尾的内容

给定目标字符串:

${A57}${A17}${A23}${A20}${A35}${A57}${A33}${A24}${A38}${A38}${A24}${A17}${A57}${A33}${A23}${A38}${A18}${E52}${A28}${A28}${A28}${A25}${A38}${A22}${A50}${A30}${A57}${A37}${A18}${A44}${A15}${A28}${A29}${A29}${A29}${A29}${A14}

默认grep -o "${A57}.*${A29}${A14}"会匹配第一个${A57}到结尾的完整内容,因为正则的.*是贪婪匹配,会尽可能早地开始并匹配最长的结果。

要匹配最后一个${A57}到结尾的目标内容,可以使用GNU grep的Perl兼容正则扩展(-P选项),结合\K元字符实现:

grep -Po '.*\K${A57}.*${A29}${A14}' your_file.txt

原理说明:

  • .*:贪婪匹配所有字符,直到遇到最后一个${A57}(贪婪特性会优先匹配到最靠后的位置)
  • \K:丢弃前面匹配的所有内容,只保留\K之后的匹配结果
  • ${A57}.*${A29}${A14}:匹配从最后一个${A57}开始,到${A29}${A14}结束的内容

执行上述命令后,输出结果就是:

${A57}${A37}${A18}${A44}${A15}${A28}${A29}${A29}${A29}${A29}${A14}

替代方案(无GNU grep时)

如果你的环境只有BSD grep(比如macOS默认的grep),可以用sed实现相同效果:

sed -n 's/.*\(${A57}.*${A29}${A14}\)/\1/p' your_file.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:40