![문자열에서 문자를 제거하는 두 번째 인스턴스](https://linux55.com/image/159118/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%EC%84%9C%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4.png)
내가 사용하는 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
키워드를 제외하면 귀하의 기능도 마찬가지입니다))