Das ist ziemlich einfach, ohne sed
zu verwenden , aber mit entsprechenden Shell-Tools. Erstens, wenn Sie sample
beibehalten müssen in einer Variablen für die spätere Verwendung, dann funktioniert etwas wie das Folgende mit Bash Ersetzung von Teilzeichenfolgen um sample
zu isolieren auf Test:/database: Zeile:
$ db=$(grep -A3 'test:' database.yml | tail -n1); db=${db//*database: /}; echo "$db"
sample
oder für eine kürzere Lösung, die Sie auf die Befehlszeile ausgeben können, entfernen Sie die Variablen- und Befehlsersetzung und verwenden Sie ein Tool wie cut
:
$ grep -A3 'test:' database.yml | tail -n1 | cut -c 13-
sample
oder mit awk
, einfach:
$ grep -A3 'test:' database.yml | tail -n1 | awk '{ print $2}'
sample
All die verschiedenen Möglichkeiten können innerhalb der Befehlsersetzung verwendet werden (z.B. var=$(stuff)
), um sample
zu speichern in var
, es ist nur eine Frage, welche Sie lieber verwenden möchten. Ich denke, du verstehst es.
Es gibt bessere Tools als sed
. Sie stecken vielleicht auf einem Minimalsystem fest, aber andere Leute, die nach einer Antwort suchen, werden es wahrscheinlich nicht sein.
Die Python-Version von yq verhält sich wie jq:
$ pip3 install yq
$ yq -r .test.database database.yml
sample
shyaml funktioniert auch, hat aber eine seltsame Einschränkung, dass Sie nur dorthin umleiten können:
$ pip3 install shyaml
$ shyaml get-value test.database < database.yml
sample
Wenn perl
ist da und Sie haben YAML installiert:
$ cpan YAML
$ perl -MYAML -le 'print YAML::LoadFile(shift)->{test}{database}' database.yml
sample
Oder, wenn Sie möchten, ruby
:
$ ruby -r yaml -e 'puts YAML.load_file(ARGV[0])["test"]["database"]' database.yml
sample