grep 带有可能前缀的 SHA-1 哈希

the*_*may 1 regex git bash grep

我想从git submodule status <PATH>我的子模块的 SHA-1 提交哈希中进行 grep 。根据git submodule --help

状态 [--缓存] [--递归] [--] [...]

显示子模块的状态。这将打印每个子模块当前签出的提交的 SHA-1,以及 SHA-1 的子模块路径和 git 描述的输出。如果子模块未初始化,则每个 SHA-1 可能会以 - 为前缀;如果当前签出的子模块提交与包含存储库的索引中找到的 SHA-1 不匹配,则以 + 为前缀;如果子模块存在合并冲突,则每个 SHA-1 可能会以 U 为前缀。

所以结果看起来像这样:

 f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
Run Code Online (Sandbox Code Playgroud)

描述提到每个哈希可能会以 a+或 a为前缀-。我对这些符号不感兴趣,因此,无论它给我什么结果,我都想获得不带前缀的 40 个字符的哈希值。

例子:

input: +f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
desired output: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1

input: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
desired output: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1
Run Code Online (Sandbox Code Playgroud)

我已经尝试过类似的方法awk '{print $1;}' | grep -e '[0-9a-f]\{40\}',但它似乎没有删除前缀。有什么优雅的解决方案吗?

jth*_*ill 5

我想从git submodule status <PATH>我的子模块的 SHA-1 提交哈希中进行 grep 。

为什么要经历那些轮回?只需直接询问您想要的内容即可:

git rev-parse :<PATH>
Run Code Online (Sandbox Code Playgroud)