문자열에서 문자를 제거하는 두 번째 인스턴스

문자열에서 문자를 제거하는 두 번째 인스턴스

내가 사용하는 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-search. git 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키워드를 제외하면 귀하의 기능도 마찬가지입니다))

관련 정보