ich jede Zeile aus einem Text mit dieser Struktur analysieren wollen:Shell: Verwenden Sie grep auf eine Variable mit Zeilenumbrüchen
ipv4address: 1.2.3.4/29
ipv4gateway: 1.2.3.1
ipv4mtu: 1500
ipv4dnsserver: 8.8.8.8
ipv4dnsserver: 8.8.4.4
Newlines werden durch \n
getrennt.
dieser Datei erzeugen ich ein Programm verwenden, die folgende Ausgabe einige Informationen:
CONFIG=$(umbim $DBG -d $device -n -t $tid config) || {
echo "mbim[$$]" "config failed"
return 1
}
dann schreiben ich die $ CONFIG Variable in einer Datei, es ist nur noch einmal zu lesen wieder, was mir falsch zu sein scheint.
echo "$CONFIG" > /tmp/ip
Dann nach, dass ich verwenden grep
die Informationen zu erhalten:
IP=$(grep "ipv4address" /tmp/ip |grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")
NM=$(grep "ipv4address" /tmp/ip |grep -o '.\{2\}$')
GW=$(grep "ipv4gateway" /tmp/ip |grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")
Ich möchte eine Datei zu schreiben vermeiden. Es wäre besser, oder zumindest scheint es besser, wenn ich die $ CONFIG Variable grep. Die Verwendung von echo $CONFIG
führt jedoch nicht zu den Ergebnissen, da damit Zeilenumbrüche ausgeschlossen werden. Das Gleiche gilt für printf
.
Ich benutze busybox, wenn das hilft.
BusyBox v1.25.1() built-in shell (ash)
Edit: Dies ist, was passiert, wenn ich die Variable mit echo
drucken möchten:
$ CONFIG=$(cat /tmp/ip)
$ echo -e $CONFIG
ipv4address: 1.2.3.4/29 ipv4gateway: 1.2.3.1 ipv4mtu: 1500 ipv4dnsserver: 8.8.8.8 ipv4dnsserver: 8.8.4.4
'echo -e' wird auch neue Zeilen ausgeben. –
Danke, ich habe vor einigen Sekunden ein Beispiel hinzugefügt. Leider erfolglos. – fsp
Ohne mit 'grep | grep', können Sie verwenden: 'IP = $ (echo" $ CONFIG "| grep" ipv4address "| grep -E ...)' usw. Beachten Sie die Anführungszeichen um '" $ CONFIG "'. Sie können möglicherweise keine Bash-Strings verwenden, da Sie BusyBox verwenden, aber sie würden einen Prozess speichern, falls verfügbar. Ich würde mit 'sed' anstatt mit' grep | suchen Grep'. Hinweis [Mehrzeilige Ausgabe in eine Bash-Variable aufzeichnen] (https://stackoverflow.com/questions/613572/). –