githubページからSSH URL情報を抽出するために、sed、awk、curの相互作用を理解します。

githubページからSSH URL情報を抽出するために、sed、awk、curの相互作用を理解します。

ユーザーのGitHubアカウントにあるすべてのパブリックリポジトリをインポートする必要があります。そのためにAPI出力を取得しました。https://api.github.com/users/SOMEUSER/repos

これが私が思いついたものです。ファイルからssh_url行を抽出するには、次のようにします。

sed -n '/ssh_url/p' SOMEFILE

これでリポジトリのSSH URLだけが残り、その周囲には引用符があります。今私はそれを見つけました:

awk -F\" '{print $(NF-1)}' 

それからそれらを一つにまとめました。

curl https://api.github.com/users/SOMEUSER/repos | sed -n '/ssh_url/p' | awk -F\" '{print $(NF-1)}' | xargs -n1 git clone

今仕事をしているのでいいですね。なぜ動作しますか?

答え1

sed -n '/ssh_url/p'

文字列を含むすべての行を印刷しますssh_url。これはsed一般的な用途ではありません。これは次の方法で行うことができますgrepawk直接awk使用することもできます)。

grep ssh_url

awk -F\" '/ssh_url/ {print $(NF-1)}'

-F\"awk文字で区切られた行の内容を示します"NFフィールド数。つまり、NF-1 "行に文字があります。print $(NF-1)最後のフィールドを印刷します。行がある場合は印刷foo"bar"bazしてくださいbar

答え2

このコマンドはJSON文字列を返すので、JSONパーサーを使用します。jq

url="https://api.github.com/users/USER/repos"
curl -s "$url" | jq '.[]|.ssh_url' | tr -d '"'

jqスクリプトは、配列の各要素に "ssh_url"メンバーの値を提供することを意味します。二重引用符を削除するには、trを使用してください。

関連情報