127103
Goto Top

Grep Textdatei nach mehreren Strings durchsuchen je String Anzahl der Zeilen ausgeben

Hallo lieber Foristen,

Folgendes konnte ich bereits erfolgreich eruieren.
Grep sucht in der Datei nach "ocsp" und spuckt mir die Anzahl der Zeilen in test_1.log.
grep -c '/.*ocsp.*$' /home/user/januar.log > /home/user/test_1.log  

Im Endeffekt möchte ich am liebsten dass, zu "suchende Strings" aus einer Datei entnommen werden.

cat suchstrings.txt | xargs -I {} grep -e '/^.*({}).*$' -c /home/user/januar.log > /home/user/zertifikate/test.log  

Toll wäre auch wenn ich wüsste wie ich, pro zu suchenden String, eine eigene Datei anlegen könnte. Also die Ergebnisse pro suche in test_${STRING}.log beispielsweise.
Wobei mir nicht ganz klar ist ob xargs quasi alle Argumente aus der txt mit einem mal übergibt...

Grüße

Content-Key: 296994

Url: https://administrator.de/contentid/296994

Ausgedruckt am: 19.03.2024 um 02:03 Uhr

Mitglied: jthuemmler
jthuemmler 22.02.2016 um 13:40:49 Uhr
Goto Top
Hi,

für erstens gibt es die Option -F <strings>.

Zweitens müsstest Du mit einer Schleife gut lösen können

while read STRING 
  do 
  grep -c '/.*$STRING.*$' >resultfor_$STRING_.grep  
 done <DATEI

wobei DATEI Deine Strings enthält, einen je Zeile. Enthalten die Strings Leerzeichen etc., wird es etwas komplexer... face-wink

cu jth
Mitglied: 126919
Lösung 126919 22.02.2016 aktualisiert um 15:44:36 Uhr
Goto Top
 for line in $(cat ./suchstrings.txt) ;do grep -ce "/.*$line" /home/user/januar.log >"./result_${line}.txt" ;done  
fk
Mitglied: 127103
127103 22.02.2016 aktualisiert um 14:18:51 Uhr
Goto Top
Sorry aber ich versteh nicht wie das jetzt weiterhilft, steh ich auf'm Schlauch? !.Code funktioniert so wie er soll -F wäre laut manpage Fixed-strings aber grep soll ruhig mit regex arbeiten.

Bei Zweitens ließt die bash die Standarteingabe und keine Datei! Oder?

Danke trotzdem face-smile


Edit

-f für Flag vielleicht? Könnte klappen...
Mitglied: 127103
127103 22.02.2016 um 14:02:22 Uhr
Goto Top
Hi Flachkoepper,

das geht definitiv in die richtige Richtung.
Er bringt mir jetzt

.txt: Protokollfehler
.txt: Protokollfehler

und gibt nur die Anzahl des letzten Suchstrings aus. ...sind grad drei Zeilen in suchstrings.txt

Wieso fängt er von "unten" an?

face-smile
Mitglied: 126919
126919 22.02.2016 aktualisiert um 14:05:42 Uhr
Goto Top
Kann ich nicht nachvollziehen, geht hier problemlos ...simpelste FOR-Schleife....
Bash Guide for Beginners
Mitglied: 127103
127103 22.02.2016 aktualisiert um 14:49:11 Uhr
Goto Top
Okay, habs mal alles in einen anderen Ordner kopiert, vom VirtualBox Share Ordner in einen Debian eigenen. Die Fehlermeldung ist weg aber das Verhalten bleibt gleich - Die letzte Zeile wird erfolgreich gesucht (Anzahl Zeilen und Datei wird erstellt) die anderen Datein haben Inhalt "0". In "suchstrings.txt" steht in einer Zeile immer der zu suchende String ohne Delimiter o.Ä. ... Was mir auffällt, die Dateinamen (Die Results!) enthalten ein "Space" vor der Dateiendung!? Falls noch einer ne Idee hat... Weis nicht woran es liegt, hatte hier nochmal geguckt

http://stackoverflow.com/questions/17291557/extract-strings-in-a-text-f ...

Wenn ich alles in eine einzige Datei schreibe mit ">> Test.txt" kommt
0
0
124693


Do i miss something here?
Mitglied: jthuemmler
jthuemmler 22.02.2016 aktualisiert um 15:23:49 Uhr
Goto Top
Hi,

sorry, ja die Datei zum greppen in der Schleife fehlt und, wenn eine Variable von der Shell ersetzt werden soll, muss sie in Anführungszeichen stehen und nicht in Hochkomma... korrekt wäre
while read hstr  
  do  
  grep -c "^.*$hstr.*$" </home/user/januar.log >resultfor_$hstr_.grep   
 done <suchstrings.txt


cu jth
Mitglied: 127103
127103 22.02.2016, aktualisiert am 28.12.2016 um 09:39:13 Uhr
Goto Top
@ Flachkoepper: Hast mich auf den richtigen Weg gebracht... am Ende hat ein "neu-Anlegen" der "suchstrings.txt" geholfen... muss wohl was mit Kodierung unter Windows die Funktionalität zermischt haben... UTF-8 mit/ohne BOM oder irgendwas in der Art...

läuft!