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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren