사용자의 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'
string 을 포함하는 모든 행을 인쇄합니다 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을 사용하세요.