Ich hatte gehofft, curl
Daten in eine Shell-Skriptvariable zu integrieren und diese Variable dann zu verwenden cat
oder awk
zu bearbeiten, als wäre es eine Datei.
Ist dies möglich oder gibt es eine Problemumgehung? Muss ich den curl
Befehl in einer Datei speichern?
Muss ich curl
für jede Bit-Formatierung, die ich ausführen möchte, mehrere Male ausführen ?
Ich bin curl
ipinfo.io und möchte die passenden Zeilen für "Stadt" und "Region" ausgeben. Ich weiß, wie man die Ausgabe wie gewünscht verwendet awk
und sed
formatiert.
Versuchen Sie beispielsweise, curl ipinfo.io/"8.8.8.8"
das Ergebnis für eine Google DNS-IP-Adresse zu erhalten.
Ich möchte nur "Mountain View" und "California", vorzugsweise in derselben Zeile, mit einigen gängigen Formatierungen wie "Mountain View, California" drucken.
quelle
curl
, die Ausgabe zu speichern (es sei denn, Sie möchten sie mehrmals verwenden), Sie können sie direkt ancat
oder weitergebenawk
. Wie heemayl sagte, erklären Sie bitte genau, was Sie tun möchten.awk
undsed
formatiert. Versuchen Sie zum Beispiel,curl ipinfo.io/"8.8.8.8"
für das Ergebnis für eine Google DNS IP-AdresseAntworten:
Im Allgemeinen gibt es geeignetere Methoden zum Parsen von JSON-Objekten. Da das JSON-Objekt in diesem Fall jedoch sehr einfach ist, können Sie die
curl
Ausgabe in einer Variablen speichern (was möglich ist) und einfach AWK verwenden:Wenn Sie die
curl
Ausgabe jedoch nicht mehrmals verwenden möchten, können Sie nur eine Pipe verwenden:<<<
ist eine Form der Eingabeumleitung, die als "here string" bezeichnet wird. Es leitet die STDIN eines Befehls vom Terminal zu einer Zeichenfolge um.Was hier passiert, ist, dass
$var
zwischen den doppelten Anführungszeichen erweitert wird; Die STDIN des AWK-Befehls wird vom Terminal zur erweiterten Zeichenfolge umgeleitet, und AWK liest die Zeichenfolge folglich als Eingabedatei.quelle
<<<
Teil etwas genauer erklären ? edit: das nehme ich es?<<<
Token hinzugefügt : Beachten Sie, dass ich alle diese Informationen gebeten habe, sich des Umfangs Ihrer Frage äußerst sicher zu sein (um zu vermeiden, dass jemand potenziell unbrauchbare Antworten gibt). Ich verstehe, dass die Verarbeitung selbst wahrscheinlich nicht notwendig war. Die Antwort von Janos unten ist genauso gültig.Sicher kannst du. Wenn der Inhalt nicht zu groß ist und Sie mehrere Befehle ausführen möchten, um den Inhalt zu analysieren, ist es eine gute Sache, ihn im Speicher zwischenzuspeichern, anstatt ihn jedes Mal neu herunterzuladen.
So speichern Sie das Ergebnis von
curl
in einer Variablen:So führen Sie Befehle darauf aus:
Die doppelten Anführungszeichen no "$ ipinfo" sind wichtig, um alle Leerzeichen zu erhalten.
Eine "Problemumgehung", um den Inhalt nicht in einer Variablen zu speichern, besteht darin, eine Möglichkeit zu finden, den Inhalt in einer einzelnen Pipeline zu verarbeiten, wie dies bei @kos der Fall war.
quelle
Eine weitere einfache und besser lesbare Möglichkeit, dies zu tun, können Sie verwenden
python
, die in allen Linux-basierten Systemen vorhanden ist, um den JSON für Sie zu analysierenImportieren
json
undsys
verpacken Sie einfach dasjson
Objekt und druckenresult
Sie dann alle gewünschten Eigenschaften aus dem Objekt:Ich habe das Skript besser lesbar hinzugefügt. Sie sollten jedoch eine Zeile einfügen oder
\
am Ende jeder Zeile hinzufügen , wenn Sie es in mehreren Zeilen schreiben müssen.quelle