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「今まで一致するものを除外する」を提供します。結合すると、-oゼロ個以上のスペースまたは@()で^[ @]*始まり、Rゼロ個以上の文字で始まり、他のスペースまで検索できます。\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

おすすめ記事