Premiär! Fyndchans i SweClockers Månadens Drop

Hjälp med att pipa grep till annat kommando

Permalänk
Medlem

Hjälp med att pipa grep till annat kommando

Hejsan!

Sitter för tillfället och leker lite med git api't. Så det jag vill göra är att med hjälp av api't söka upp ett gäng repos, greppa clone_url'en och sedan clona dessa.

Det jag försöker just nu är:

sudo git clone (curl 'https://api.github.com/search/repositories?q=user:Switchonpro...' | grep "clone_url")

Men det fungerar ju inte. Nån som förstår vad jag försöker göra och som har en lösning på det?

Permalänk
Hedersmedlem

Testa att köra bara

så ser du en del problem. `-s`-växeln till Curl kan vara nyttig att titta på, och du behöver också mer avancerad matchning för att få ut just en URL på detta sätt.

Github ger dig JSON-data, så hellre än `grep` och reguljära uttryck så kanske du borde använda något som är medvetet om denna datastruktur.

Notera också att du troligen vill använda $()-konstruktionen för att köra ett kommando i ett subskal snarare än att bara sätta parenteser som du gör nu.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av phz:

Testa att köra bara

så ser du en del problem. `-s`-växeln till Curl kan vara nyttig att titta på, och du behöver också mer avancerad matchning för att få ut just en URL på detta sätt.

Github ger dig JSON-data, så hellre än `grep` och reguljära uttryck så kanske du borde använda något som är medvetet om denna datastruktur.

Notera också att du troligen vill använda $()-konstruktionen för att köra ett kommando i ett subskal snarare än att bara sätta parenteser som du gör nu.

Märkte att det blev lite problem, skriver ett script istället. Nu behöver jag ett sätt att plocka bort första och sista tecknet i en oregelbundet lång sträng, och det var ett tag sen jag scriptade, några idéer?

Permalänk
Medlem
Skrivet av bagfalls:

Märkte att det blev lite problem, skriver ett script istället. Nu behöver jag ett sätt att plocka bort första och sista tecknet i en oregelbundet lång sträng, och det var ett tag sen jag scriptade, några idéer?

Testa jshon,

curl 'https://api.github.com/search/repositories?q=user:CommanderAl...' | jshon -e items | awk '/clone_url/ {print $2}'

ger mig

"https:\/\/github.com\/CommanderAlchemy\/SmartPark.git", "https:\/\/github.com\/CommanderAlchemy\/Concurrent-Programming.git", "https:\/\/github.com\/CommanderAlchemy\/Android.git", "https:\/\/github.com\/CommanderAlchemy\/Sweclockers-theme-dark.git", "https:\/\/github.com\/CommanderAlchemy\/.bin.git", "https:\/\/github.com\/CommanderAlchemy\/Advanced-Programming.git", "https:\/\/github.com\/CommanderAlchemy\/ProjectHTML-MyEVE.git", "https:\/\/github.com\/CommanderAlchemy\/Metoder-Statistik.git", "https:\/\/github.com\/CommanderAlchemy\/HTML-Nytto.git",

lägg till sed

curl 'https://api.github.com/search/repositories?q=user:CommanderAl...' | jshon -e items | awk '/clone_url/ {print $2}' | sed 's/\\//g'

och du får

Dock kan ju sed vara problematisk om någon har \ i sitt projekt.

Dock om du gör ett skript kan du använda dig helt av jshon vilket ger bra fler möjligheter.

Ger dig en array att arbeta mot med -l på slutet får du längden av arrayn. Sedan kan du använda dig av indexvärdet för att få fram data dvs.

curl 'https://api.github.com/search/repositories?q=user:CommanderAl...' | jshon -e items -e 8 -e clone_url

Där index är 8 får du då värdet från clone_url dock får du med escapes för slashes vilket man får lösa med sed som ovan, kanske genom att bara ta bort 4 första backslashes dock får du kolla vad som händer om någon har det i namnet etc...

Edit:

Vad skall man säga, kodjunkie som jag är samt tiden jag spenderar genom att glo på github repo's fick mig att göra ett snabbt skript just for the hell of it. Lär väl sedan fortsätta så man kan välja från lista eller clona alla som det är nu men funkar genom att helt enkelt skriva in gitcloner username för att få hens alla repos till ~/myclones

https://github.com/CommanderAlchemy/.bin/blob/master/gitclone...

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.