Seite 1 von 1

(gelöst)in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 11th, '23, 13:48
von AndieY
Hab mal eine Distributionsübergreifende Frage, zum Suchen in Dateien.

Ich hab hier 15 Dateien, nennen wir sie mal 1.txt bis 15.txt, ich möchte nun gerne wissen ob in Datei 7.txt bis 11.txt das Word Erdbeertorte nur in der 2ten Zeile vorkommt. Jemand eine Idee wie man das als Einzeiler löst?

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 11th, '23, 16:57
von doktor5000

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 11th, '23, 20:21
von AndieY
so 'ne 3/4 Lösung hab ich
Code: Alles auswählen
 find -iname 'Muttersrezepte_[7,8,9,10,11].txt' -exec sed -ne '2p' {} \; |grep 'Erdbeertorte'


Das Problem ist, es funktioniert nur solange die Nummer einstellig ist z.B. gibt er bei 10 auch noch die 1 aus.

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 11th, '23, 21:34
von doktor5000
Warum nimmst du nicht einfach einen der Vorschläge aus den Antworten im Link ?

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 12th, '23, 06:17
von AndieY
@doktor5000 ich weiß gerade nicht was du meinst?

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 12th, '23, 11:28
von doktor5000
Naja du stellst die Frage, bekommst eine Lösung dafür. Machst dann aber irgendwas anderes, was nicht ganz das macht was du suchst. Aber jedem das Seine.

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 12th, '23, 11:55
von AndieY
Tut mir leid Ich steh gerade auf dem Schlauch, welche Lösung du meinst. Das "find -name -exec" hab ich doch aus dem Link von dir. Und ganz am Rande sei noch erwähnt das meine spärlichen Englischkenntnisse leider auch nicht ausreichend sind um den Link wirklich sicher sinngemäß zu verstehen.

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 12th, '23, 14:15
von doktor5000
Die akzeptierte Antwort, etwas angepasst da du es ja nicht rekursiv brauchst:
Code: Alles auswählen
grep -Plz '^(?:.*\n){1}.*Erdbeertorte' Muttersrezepte_*txt

zeigt dir alle Treffer (Dateinamen) aus Muttersrezepte_*txt wo Erdbeertorte genau in der zweiten Zeile steht.

Es geht aber viel einfacher
Code: Alles auswählen
grep -ni erdbeertorte Muttersrezepte*txt

zeigt alle Zeilennummern wo erdbeertorte vorkommt, das kann man einfach weiter filtern mit awk oder grep, je nachdem was du mit der Ausgabe anstellen willst.

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 12th, '23, 18:45
von AndieY
das Perlgrep muss ich jetzt mal aufdrösseln
^ ist der Zeilenanfang
() die Klammer umschließt einen Teil vom Regex
{} ist das Vorkommen vom Vorherigen Zeichen
.* sind beliebige Zeichen
\n ist der Zeilenumbruch
aber was macht das ?:

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 12th, '23, 21:12
von sturmvogel

Re: in der Shell mehre Dateien gleichzeitig durchsuchen

BeitragVerfasst: Dez 12th, '23, 21:35
von doktor5000
Das wird in der Antwort auch beschrieben, und ein Übersetzer ist nun nicht so kompliziert zu benutzen: https://unix-stackexchange-com.translate.goog/questions/690504/recursive-grep-matching-only-specific-line-number/690659?_x_tr_sl=auto&_x_tr_tl=de&_x_tr_hl=de&_x_tr_pto=wapp#690659
?: ist dabei für einen komplexen Ausdruck bei einem Lookahead, siehe auch https://www.perlmonks.org/?node_id=518444
{1} ist die Anzahl der Vorkommen von dem was links davon steht. Also am Anfang der Zeile wird irgendein String mit einem folgenden Zeilenumbruch gesucht, wo nach dem Zeilenumbruch in der zweiten Zeile Erdbeertorte steht.

Re: (gelöst)in der Shell mehre Dateien gleichzeitig durchsuc

BeitragVerfasst: Dez 13th, '23, 16:47
von AndieY
Danke für die Erklärung.