Bash programmietung Hilfe

Gast #4196294
Lesenswert?
• ▲
▼
Hallo zusammen,
Ich habe eine Datei die wie folgt aussieht
1
{
2
        "settings":
3
        {
4
                "httpServer":
5
                {
6
                        "enabled": true,
7
                        "port": 5001
8
                },
9
},
10
“plugin“:
11
{
12
…….
13
},
14
}

Nun möchte ich den Port 5001 mit Hilfe von awk und grep auslesen aber 
ich komme nicht so recht auf das gewünschte Ergebnis. Kann mir jmd dabei 
helfen?
Gast #4196298
Lesenswert?
• ▲
▼
Jo schrieb:
> Ich habe eine Datei die wie folgt aussieht
1
{
2
        "settings":
3
        {
4
                "httpServer":
5
                {
6
                        "enabled": true,
7
                         "port": 5001
8
                },
9
},
10
“plugin“:
11
{
12
…….
13
},
14
}
> Nun möchte ich den Port 5001 mit Hilfe von awk und grep auslesen aber
> ich komme nicht so recht auf das gewünschte Ergebnis. Kann mir jmd dabei
> helfen?

Wozu awk?
1
tr -d '\n' <inputfile | grep -oE 'port:[[:space:]]*[0-9]+' | cut -d ':' -f 2

... oder so ähnlich.
Wenn die Zeilenumbrüche fix sind, ist das tr sogar optional, wenn es 
CRLF sind muss halt cr auch noch gelöscht werden.

Das grep -o gibt es bei alten grep-Versionen nicht, heutzutage kann das 
selbst ne Busybox.
Gast #4196300
Lesenswert?
• ▲
▼
Ach Mist, vergessen: In o.g Regex sind die Anführungszeichen nicht drin, 
die müssen noch mit rein, ggf. nochmal mit :space:* vom Doppelpunkt 
getrennt.

Die führenden Leerräume, die man beim cut mitbekommt sind entweder gar 
kein Problem oder man bekommt sie via Variablenzuweisung weg - bash 
trimmt da den Leerraum.
#4196470
Lesenswert?
• ▲
▼
Das ist ja JSON, willst du da wirklich mit grep/sed/awk ran? was 
passiert wenn sich die Formatierung ändert?
oder kannst du sicherstellen das es immer hübsch-Formatiert ist?
alternativ kannst du jq verwenden, in deinem fall so:
1
$ jq .settings.httpServer.port test.json 
2
5001
3

4
$

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.