最高の答えこの問題繰り返される空白に基づいて切り取るcut
ためにwithで使用できることを示します。tr
< file tr -s ' ' | cut -d ' ' -f 8
ディレクトリ内の複数のGitリポジトリのリモートアドレスを取得し、次を使用して各リポジトリからリモートURLフィールドを抽出しようとしています。
ls | xargs -I{} git -C {} remote -vv | sed -n 'p;n' | tr -s " " | cut -d ' ' -f1
ただし、これにより次のような出力が発生します。ここでは、2つの連続したスペース(Unicodeコードポイント32)が保存されていることがわかります。
origin https://github.com/jik876/hifi-gan.git
origin https://github.com/NVIDIA/NeMo.git
origin https://github.com/NVIDIA/tacotron2.git
(私も使ってxargs
みましたtr
)
必要な出力はURLのリストです。たとえば、次のようになります。
https://github.com/jik876/hifi-gan.git
https://github.com/NVIDIA/NeMo.git
https://github.com/NVIDIA/tacotron2.git
私がここで何を見逃しているのでしょうか?
ベストアンサー1
2つのスペースではなくタブです。
シェルループを使用して、現在の作業ディレクトリにディレクトリがあるサブディレクトリを繰り返し、空白で区切られた最初のフィールドを.git
繰り返し(最後に追加されたタグを削除するために)各リモート+ URLに渡すことができます。 1行だけ表示するには:cut
(fetch)
(push)
git
uniq
for r in ./*/.git/; do
git -C "$r" remote -v
done | cut -f 1 -d ' ' | uniq | cut -f 2
最後の項目は、cut -f 2
タブで区切られた2番目のフィールドを返してURLを区切ります。
タブとスペースが同じように処理されることを考慮するとawk
(特定の区切り記号やパターンを使用しない限り)、後続のパイプを単一の呼び出しに置き換えることができますawk
。
for r in ./*/.git/; do
git -C "$r" remote -v
done | awk '!seen[$2]++ { print $2 }'