从字符串中删除字符的第二个实例

从字符串中删除字符的第二个实例

我正在努力使我使用的 git 命令更有用。我做的一个常见任务是grep我的git rev-list --all.我编写了(又名剪切并粘贴另一个 StackExchange 答案)git 命令来为我执行此操作。

~/bin/git-search:

!/bin/bash
function _search() {
    git rev-list --all | (
        while read revision; do
            git grep -F $1 $revision
        done
    )
}
_search $1

其输出如下所示:

f26ce56cf6b17401292c494f906b2b6a9071ca75:filename.py:grepped string

我通常会获取这些结果并git show与提交和文件路径一起运行以查看该文件的特定版本。git show接受 的输入{COMMIT HASH}:path/to/file

我理想的情况是让我的 git 函数在第二个函数所在的位置粘贴一个空格:,这样我可以更轻松地将 的输出复制并粘贴到git-searchgit show即:

f26ce56cf6b17401292c494f906b2b6a9071ca75:filename.py grepped string

我想为此使用 BASH,因为我已经在使用 BASH。我最初的解决方案是使用 Python,但这对我来说似乎没有必要。我只是不确定如何在 BASH 中最好地实现这一点。

答案1

sed 's/:/ /2'

这会将第二个:字符更改为空格。

您可以将其作为函数管道的额外阶段:

#!/bin/sh

git rev-list --all |
while read revision; do
    git grep -F "$1" "$revision"
done |
sed 's/:/ /2'

(我实际上删除了该函数,因为它似乎不需要;还要注意变量扩展的引用;哦,它是一个/bin/sh脚本,因为它没有使用任何bash特定功能(你的也没有,除了不需要的function关键字) )

相关内容