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