Gitolite 정보 출력에서 ​​저장소 이름 찾기

Gitolite 정보 출력에서 ​​저장소 이름 찾기

info스크립트에 추가 파이핑을 위해 gitolite 명령 출력에서 ​​이름을 어떻게 추출할 수 있습니까 ?

모든 저장소를 gitolite에서 Gitlab 서버로 마이그레이션하기 위한 마이그레이션 스크립트를 작성 중입니다. 그래서 gitolite에서 모든 저장소 이름을 가져와 Gitlab에서 사용하고 싶습니다. 아래는예제 출력맞춰보려고 합니다.

hello sitaram, this is gitolite v2.1-29-g5a125fa running on git 1.7.4.4
the gitolite config gives you the following access:
     R      SecureBrowse
     R   W  anu-wsd
     R   W  entrans
    @R   W  git-notes
    @R   W  gitolite
     R   W  gitolite-admin
     R   W  indic_web_input
 @C  R   W  private/sitaram/[\w.-]+
     R   W  proxy
 @C @R   W  public/sitaram/[\w.-]+
    @R_ @W_ testing
     R   W  vic

다음과 같이 출력되어야 합니다.

SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vkc

현재 저는 이것을 다른 사람들이 사용할 수 있도록 쉘 스크립트에 넣으려고 합니다. 내 현재 방법은 grep다음과 같은 명령입니다.

grep -Eio "([A-Za-z0-9_-]+)$" gitolite-info-output

그러나 이는 4첫 번째 줄의 끝 부분도 캡처합니다. 몇 가지 접근 방식을 시도했지만 다른 것을 포함하거나 제외하지 않고는 제대로 제외할 수 없는 것 같습니다.

이 방법OSX 10.10.3.

답변1

질문에 표시한 입력을 바탕으로 다음과 같이 작동합니다.

$ grep -oP '^[ @]*R.* \K.*' gitolite-info-output
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic

이는 GNU grep의 -P스위치를 사용하여 Perl 호환 정규 표현식을 활성화하는 것입니다. 이는 \K"지금까지 일치하는 항목을 제외합니다"를 제공합니다. 결합하면 -o0개 이상의 공백 또는 @( )로 ^[ @]*시작하고 R0개 이상의 문자로 시작하여 다른 공백까지 검색할 수 있습니다. \K마지막 단어만 인쇄되므로 이 모든 내용은 삭제됩니다 .


GNU가 없는 경우 grep(예: OSX) 다음을 수행할 수 있습니다.

$ grep -E '^[ @]*R' gitolite-info-output | awk '{print $NF}'
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic

또는 모든 것을 완료하려면 다음을 수행하십시오 awk.

$ awk '/^[ @]*R/{print $NF}' gitolite-info-output 
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic

또는 펄:

$ perl -nle '/^[ @]*R.*\s(.*)/ && print $1' gitolite-info-output 
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic

관련 정보