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

Mac El Capitan下如何提取Mercurial变更集ID?

解决Mac El Capitan下提取Mercurial变更集ID的问题

嘿,我明白你的困扰——Mac自带的BSD grep确实不支持GNU的-oP参数,不过有几个简单可靠的方案能帮你提取那12位的变更集ID,甚至不用绕弯子处理第一行输出:

最优方案:直接用Mercurial的模板输出

其实Mercurial本身就支持自定义日志输出格式,这是最省心也最不容易出错的方法,完全不需要管道处理其他工具:

hg log -l1 --template '{node|short}'

这个命令会直接输出最新的12位变更集ID,{node|short}是Mercurial内置的模板变量,专门用来获取短格式的节点ID,比事后提取靠谱多了。

如果你坚持要处理现有管道的第一行输出

如果你已经有了hg log -l1 | sed -n 1p的输出(比如第一行是类似changeset: 1234:6e4a01192927这样的格式),可以用以下两种方法:

方法1:用sed提取

利用sed的替换和捕获组功能,精准匹配12位十六进制ID:

hg log -l1 | sed -n 's/.*: *\([0-9a-f]\{12\}\).*/\1/p'

原理:

  • .*: * 匹配到ID前面的所有内容(包括冒号和任意空格)
  • \([0-9a-f]\{12\}\) 捕获12位的十六进制字符串(也就是我们要的ID)
  • \1 把捕获的内容替换成整个行的输出,p参数只打印匹配到的行

方法2:用BSD grep的扩展正则

Mac的grep支持-E(扩展正则)和-o(只输出匹配部分),直接匹配12位十六进制串:

hg log -l1 | grep -Eo '[0-9a-f]{12}'

这个方法简单粗暴,只要第一行里只有这一个12位的十六进制字符串,就能准确提取出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:13:37