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