理解sed、awk和curl交互从github页面提取ssh URL信息

理解sed、awk和curl交互从github页面提取ssh URL信息

我需要提取用户 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通常使用的用途。这可以通过以下方式完成grep(并且通过awk使用,也awk可以自行完成):

grep ssh_url

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

-F\"表示以字符awk分隔行的内容"NF是字段的数量,即NF-1 "该行中有字符。print $(NF-1)打印最后一个字段。如果该行是,foo"bar"bazbar打印。

答案2

由于此命令返回 JSON 字符串,因此我将使用 JSON 解析器,jq

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

jq 脚本意味着,对于数组的每个元素,给我“ssh_url”成员的值。使用 tr 删除双引号。

相关内容