1. Greifen Sie in 1 Variable
Versuche dies:
foo1=$(curl https://domain.com/file.xml | grep -E "string1|string2")
Dies wird curl
1 Mal ausgeführt und nach Vorkommen von string1
oder gesucht string2
.
2. Auf 2 Variablen eingehen
Wenn es sich um unterschiedliche Variablen handelt, ändern Sie die Taktik geringfügig. Erfassen Sie die Ausgabe von curl
und grep
danach.
output=$(curl https://domain.com/file.xml)
foo1=$(echo "$output" | grep "string1")
foo2=$(echo "$output" | grep "string2")
3. In ein Array greifen
Sie können die Ergebnisse auch in einem Array anstelle separater Variablen speichern.
output=$(curl https://domain.com/file.xml)
readarray foo < <(echo "$output" | grep "string1|string2")
Dies ist etwas schwierig zu handhaben, wenn Ihre Ergebnisse aus dem grep möglicherweise keine Ergebnisse zurückgeben, da die Ergebnisse aus "string2" möglicherweise das erste oder zweite Element im Array sind, aber ich stelle es hier nur als Demonstration von zur Verfügung die Vorgehensweise.
4. Aus grep in vars lesen
Noch eine andere Methode, die den read
Befehl zusammen mit der Prozessersetzung verwendet ( <( ..cmd..)
).
$ read -d"\n" foo1 foo2 \
<(curl https://domain.com/file.xml | grep -E "string1|string2")
Dies kann wiederum schwierig sein, wenn die Suche nach "string1" nichts zurückgibt und Übereinstimmungen für "string2" angezeigt werden $foo1
. Auch dieser Ansatz ist tendenziell weniger portabel als # 2 oder # 3 oben.
Im Ernst, Mann, es gibt ungefähr eine Million Möglichkeiten, diese Katze zu häuten.
quelle