C'est assez facile, sans utiliser sed
, mais avec les outils shell appropriés. Tout d'abord, si vous devez conserver sample
dans une variable pour une utilisation ultérieure, alors quelque chose comme ce qui suit fonctionnera en utilisant bash remplacement de sous-chaîne pour isoler sample
sur le Test :/base de données : ligne :
$ db=$(grep -A3 'test:' database.yml | tail -n1); db=${db//*database: /}; echo "$db"
sample
ou pour une solution plus courte que vous pouvez transférer sur la ligne de commande, supprimez la substitution de variable et de commande et utilisez un outil comme cut
:
$ grep -A3 'test:' database.yml | tail -n1 | cut -c 13-
sample
ou, avec awk
, simplement :
$ grep -A3 'test:' database.yml | tail -n1 | awk '{ print $2}'
sample
Toutes les différentes manières peuvent être utilisées dans la substitution de commande (c'est-à-dire var=$(stuff)
) pour stocker sample
en var
, c'est juste une question de laquelle vous préférez utiliser. Je pense que vous avez saisi l'idée.
Il existe de meilleurs outils que sed
. Vous pourriez être bloqué sur un système minimal, mais d'autres personnes à la recherche d'une réponse ne le seront probablement pas.
La version python de yq agit comme jq :
$ pip3 install yq
$ yq -r .test.database database.yml
sample
shyaml fonctionne aussi, mais a une étrange restriction que vous ne pouvez que rediriger :
$ pip3 install shyaml
$ shyaml get-value test.database < database.yml
sample
Si perl
existe et vous avez installé YAML :
$ cpan YAML
$ perl -MYAML -le 'print YAML::LoadFile(shift)->{test}{database}' database.yml
sample
Ou, si vous voulez ruby
:
$ ruby -r yaml -e 'puts YAML.load_file(ARGV[0])["test"]["database"]' database.yml
sample