我需要提取用户 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"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 删除双引号。