grep ausgabe in Variablen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
hanskanns
Beiträge: 177
Registriert: 07.06.2008 10:57:55

grep ausgabe in Variablen

Beitrag von hanskanns » 14.02.2019 19:22:29

Hallo,

ich versuche mich gerade daran ein Bashskript unter Debian zu schreiben. Nun komme ich an folgender Stelle nicht weiter und hoffe daher, dass ihr mir helfen könnt:

Ist es möglich jede Zeile diese Ausgaben in Variable umzuleiten?

Code: Alles auswählen

grep -R -h --include="*.txt" 'foo\|bar'
Danke für die Hilfe im Voraus.

DeletedUserReAsG

Re: grep ausgabe in Variablen

Beitrag von DeletedUserReAsG » 14.02.2019 21:13:35

Eine Möglichkeit wäre z.B.: variable=$(grep -R -h --include="*.txt" 'foo\|bar'). Andere werden bestimmt folgen. Es gibt übrigens ’nen ganz guten Beginners-Guide für die Bash, zu finden auf tldp.org

hanskanns
Beiträge: 177
Registriert: 07.06.2008 10:57:55

Re: grep ausgabe in Variablen

Beitrag von hanskanns » 14.02.2019 22:43:48

Danke niemand

mit

Code: Alles auswählen

variable=$(grep -R -h --include="*.txt" 'foo\|bar')
wwird aber das gesammte Output in $variable gespeichert. und ich möchte die einzelne grep ausgaben speichern

LG

TomL

Re: grep ausgabe in Variablen

Beitrag von TomL » 14.02.2019 23:08:55

hanskanns hat geschrieben: ↑ zum Beitrag ↑
14.02.2019 22:43:48
wwird aber das gesammte Output in $variable gespeichert. und ich möchte die einzelne grep ausgaben speichern
Ja, das ist möglich... dazu muss man die "Zeilen" des Ausgabeergebnisses in ein Array speichern. Ein Array ist am einfachsten umschrieben als "Listen-Variable", also eine Variable, die eine Liste von einzelnen Einträgen enthalten kann. Hier zwei Beispiele mit dem Directory-Befehl

Code: Alles auswählen

ls -lah
, der den Inhalt eines Verzeichnisses anzeigt... im Beispiel werden alle Verzeichniseinträge in ein Array gespeichert und über eine For-Schleife einzeln angezeigt:

Code: Alles auswählen

array=($(ls -lah)); for item in "${array[*]}"; do echo -e "$item\n"; done

array=($(ls -lah)); for n in ${!array[*]}; do echo -e "${array[n]}"; done
Mit grep ist es dann nicht prinzipiell anders als mit ls.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: grep ausgabe in Variablen

Beitrag von tobo » 15.02.2019 01:04:57

Vielleicht beschreibst du mal besser, was du in der Folge noch mit den Daten anstellen willst!? Auf so eine normale Variable kann man nämlich auch zeilenweise zugreifen und möglicherweise ist dieses Zwischenspeichern sogar grundsätzlich überflüssig, wenn man die Daten durch eine Pipe direkt weiterverarbeitet. Die günstigste Datenstruktur ist komplett abhängig vom Anwendungsfall, den keiner außer dir kennt.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: grep ausgabe in Variablen

Beitrag von rendegast » 15.02.2019 13:48:37

Ganz zu Fuß?

Code: Alles auswählen

TMPf=$(tempfile)
COUNT=0

grep .... | while read LINE; do
   COUNT=$(($COUNT +1))
    echo "VAR${COUNT}=\"$LINE\""
done > $TMPf

. $TMPf
rm $TMPf
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

hanskanns
Beiträge: 177
Registriert: 07.06.2008 10:57:55

Re: grep ausgabe in Variablen

Beitrag von hanskanns » 15.02.2019 18:15:55

Habe jetzt zum testen folgende datei erstellt
a.txt
und test.sh

Code: Alles auswählen

#!/bin/sh
grep "test" ~/a.txt| while read LINE; do
COUNT=$(($COUNT +1))
echo "VAR${COUNT}=\"$LINE\""
exit 0
a.txt
test
test
erhalte die meldung
Syntax Fehler: Unerwartetes Dateiende.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: grep ausgabe in Variablen

Beitrag von rendegast » 15.02.2019 20:49:54

Es fehlt Ausgangs-COUNT und 'done'.




Ein COUNT=0
würde in dem Beispiel (unformatierte Ausgabe) die Zeichenanzahl des Variablennamens schnell ändern
9 -> 10
99 -> 100
Also zur schöneren Ausgabe ein 'printf' oder 'seq -w' o.ä. einbauen oder mit einem ausreichenden Wert anfangen, also zBsp.
COUNT=1000



Und was ich auch nicht beachtet habe, in LINE enthaltene Double-Quote.
Und sonstige evtl. problematische Zeichen(kombinationen).
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten