Questo è abbastanza facile, non usando sed
, ma con strumenti shell appropriati. Innanzitutto, se devi conservare sample
in una variabile per un uso successivo, qualcosa di simile al seguente funzionerà utilizzando la sostituzione di sottostringhe di bash per isolare sample
in Test:/database: riga:
$ db=$(grep -A3 'test:' database.yml | tail -n1); db=${db//*database: /}; echo "$db"
sample
o per una soluzione più breve che puoi scaricare nella riga di comando, rimuovi la variabile e la sostituzione del comando e usa uno strumento come cut
:
$ grep -A3 'test:' database.yml | tail -n1 | cut -c 13-
sample
oppure, con awk
, semplicemente:
$ grep -A3 'test:' database.yml | tail -n1 | awk '{ print $2}'
sample
Tutti i diversi modi possono essere utilizzati all'interno della sostituzione dei comandi (es. var=$(stuff)
) per memorizzare sample
in var
, è solo una questione di cui preferiresti usare. Penso che tu abbia capito.
Ci sono strumenti migliori di sed
. Potresti essere bloccato su un sistema minimale, ma altre persone che cercano una risposta probabilmente non lo saranno.
La versione python di yq si comporta come jq:
$ pip3 install yq
$ yq -r .test.database database.yml
sample
Anche shyaml funziona, ma ha una strana restrizione che puoi solo reindirizzare in esso:
$ pip3 install shyaml
$ shyaml get-value test.database < database.yml
sample
Se perl
è in giro e hai installato YAML:
$ cpan YAML
$ perl -MYAML -le 'print YAML::LoadFile(shift)->{test}{database}' database.yml
sample
Oppure, se vuoi ruby
:
$ ruby -r yaml -e 'puts YAML.load_file(ARGV[0])["test"]["database"]' database.yml
sample