GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die Linux-Shell erhält den Wert eines Felds aus einer YML-Datei

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

Linux
  1. Beispieldatei /etc/services unter Linux

  2. Holen Sie sich die neueste Datei in einem Verzeichnis unter Linux

  3. Maximale PID unter Linux

  4. Wie bekomme ich den Pfad zur aktuellen Datei (pwd) in Linux von C?

  5. Holen Sie sich eine bestimmte Zeile aus einer Textdatei, indem Sie nur ein Shell-Skript verwenden

Wikit – Holen Sie sich Wikipedia-Zusammenfassungen von der Befehlszeile in Linux

So erstellen Sie Verzeichnisse aus einer Textdatei unter Linux

So entfernen Sie ein Passwort aus einer PDF-Datei unter Linux

So erhalten Sie den Dateinamen aus dem vollständigen Pfad in Linux

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Wie bekomme ich den Hostnamen von der IP (Linux)?