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
"지금까지 일치하는 항목을 제외합니다"를 제공합니다. 결합하면 -o
0개 이상의 공백 또는 @
( )로 ^[ @]*
시작하고 R
0개 이상의 문자로 시작하여 다른 공백까지 검색할 수 있습니다. \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