Puncte:0

Extrageți cheile din fișierul yaml folosind awk

drapel ru

Să presupunem că am un fișier yaml ca acesta:

foo:
  bara: 1

env:
  firstVar: adevărat
  secondVar: 20
  aa_thirdVar: „bună ziua”
  aa_fourthVar: fals

și trebuie să pun cheile sub înv cheie cu excepția cheilor cu aa_ prefix ca matrice bash pentru a utiliza matricea într-un script bash.

Puncte:1
drapel cn

Folosind yq comanda de la https://kislyuk.github.io/yq/ un instrument adecvat pentru a analiza fișierele în format YAML, puteți face:

yq -r '.env|to_entries[]|
    dacă (.key|test("^[^a][^a][^_]*$")) atunci
        ( .key + "=" + (.value | @sh) )
    altfel
        gol
    Sfârşit
' infile

care iese:

firstVar=adevărat
secondVar=20

acum trebuie doar să export aceste seturi de variabile

export $(yq ... )

sau creați o matrice:

IFS=$'\n' arr=( $(yq ... ) )

În ( .key + "=" + (.value | @sh) ) parte, concatenează perechile cheie-valoare pe care acestea sunt produse prin utilizarea la_întrari funcția și @SH sintaxa (care este cunoscută sub numele de „Format String and Escaping”) este utilizată pentru a furniza formatarea POSIX sh shell escape pe valorile.

drapel hr
Cel puțin în jq-1.6 există un boolean `startswith()`, așa că puteți face și ceva de genul `.env | la_entri[] | select(.key | startswith("aa_") | nu) | ( .key + "=" + (.value | @sh) )`
αғsнιη avatar
drapel cn
@steeldriver Nu credeam că ar putea avea mai multe funcții pentru acea parte match(), capture() și test(); interesant! Mulțumesc mult
drapel hr
tbh mi-am dat seama doar de asta chiar înainte de a posta - dar nu am venit cu nimic la fel de frumos ca `( .key + "=" + (.value | @sh) )` pentru formatarea ieșirii

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.