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'

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을 사용하세요.

관련 정보