Eso es bastante fácil, sin usar sed
, pero con las herramientas de shell adecuadas. Primero, si necesita conservar sample
en una variable para su uso posterior, entonces algo como lo siguiente funcionará usando bash reemplazo de subcadenas para aislar sample
en la Prueba:/base de datos: línea:
$ db=$(grep -A3 'test:' database.yml | tail -n1); db=${db//*database: /}; echo "$db"
sample
o para una solución más corta que puede volcar a la línea de comandos, elimine la variable y la sustitución de comandos y use una herramienta como cut
:
$ grep -A3 'test:' database.yml | tail -n1 | cut -c 13-
sample
o, con awk
, simplemente:
$ grep -A3 'test:' database.yml | tail -n1 | awk '{ print $2}'
sample
Todas las formas diferentes se pueden usar dentro de sustitución de comandos (es decir, var=$(stuff)
) para almacenar sample
en var
, es solo una cuestión de cuál preferiría usar. Creo que entiendes la idea.
Hay mejores herramientas que sed
. Es posible que esté atrapado en un sistema mínimo, pero otras personas que buscan una respuesta probablemente no lo estarán.
La versión Python de yq actúa como jq:
$ pip3 install yq
$ yq -r .test.database database.yml
sample
shyaml también funciona, pero tiene una restricción extraña que solo puede redirigir a él:
$ pip3 install shyaml
$ shyaml get-value test.database < database.yml
sample
Si perl
está disponible y tienes YAML instalado:
$ cpan YAML
$ perl -MYAML -le 'print YAML::LoadFile(shift)->{test}{database}' database.yml
sample
O, si quieres ruby
:
$ ruby -r yaml -e 'puts YAML.load_file(ARGV[0])["test"]["database"]' database.yml
sample