GNU/Linux >> Znalost Linux >  >> Linux

Linuxový shell získá hodnotu pole ze souboru yml

To je docela snadné, bez použití sed , ale s příslušnými nástroji shellu. Za prvé, pokud potřebujete zachovat sample v proměnné pro pozdější použití, pak bude pomocí bash náhrada podřetězců fungovat něco jako následující izolovat sample na Test:/database: řádek:

$ db=$(grep -A3 'test:' database.yml | tail -n1); db=${db//*database: /}; echo "$db"
sample

nebo pro kratší řešení, které můžete vypsat do příkazového řádku, odstraňte proměnnou a nahrazení příkazu a použijte nástroj jako cut :

$ grep -A3 'test:' database.yml | tail -n1 | cut -c 13-
sample

nebo pomocí awk , jednoduše:

$ grep -A3 'test:' database.yml | tail -n1 | awk '{ print $2}'
sample

V rámci náhrady příkazů lze použít všechny různé způsoby (tj. var=$(stuff) ) pro uložení sample v var , je to jen záležitost, kterou byste raději použili. Myslím, že tomu rozumíte.


Existují lepší nástroje než sed . Možná jste uvízli na minimálním systému, ale ostatní lidé, kteří hledají odpověď, pravděpodobně nebudou.

Pythonská verze yq se chová jako jq:

$ pip3 install yq
$ yq -r .test.database database.yml
sample

shyaml funguje také, ale má zvláštní omezení, které do něj můžete pouze přesměrovat:

$ pip3 install shyaml
$ shyaml get-value test.database < database.yml
sample

Pokud perl je v okolí a máte nainstalovaný YAML:

$ cpan YAML
$ perl -MYAML -le 'print YAML::LoadFile(shift)->{test}{database}' database.yml
sample

Nebo chcete-li ruby :

$ ruby -r yaml -e 'puts YAML.load_file(ARGV[0])["test"]["database"]' database.yml
sample

Linux
  1. Získejte nejnovější soubor v adresáři v systému Linux

  2. Maximální PID v Linuxu

  3. Jak získat cestu k aktuálnímu souboru (pwd) v Linuxu z C?

  1. Získejte konkrétní řádek z textového souboru pouze pomocí skriptu Shell

  2. zkopírujte soubor z Windows do Linuxu

  3. Získejte datum poslední změny souboru v Linuxu

  1. Ukázkový soubor /etc/services v Linuxu

  2. Získejte čas na vytváření souborů s Pythonem na linuxu

  3. Jak získat masku sítě z bash?