Dateien in Unix finden, die mehrere Strings beinhalten

Diskutiere Dateien in Unix finden, die mehrere Strings beinhalten im Anwendungen Forum im Bereich Linux/Unix Allgemein; Hallo liebe Leute, ich versuche über die Shell unter Unix alle Dateien ausfindig zu machen, die sowohl den SuchstringA als auch den SuchstringB...

  1. Ray_87

    Ray_87 Grünschnabel

    Dabei seit:
    29.08.2017
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo liebe Leute,

    ich versuche über die Shell unter Unix alle Dateien ausfindig zu machen, die sowohl den SuchstringA als auch den SuchstringB enthalten. Die gefunden Dateien will ich mir in eine txt-Datei ausgeben lassen.

    Dateien zu finden, die nur einen Suchstring enthalten, habe ich schon hinbekommen:
    Code:
    find /SuchVerzeichnis/ -type f -exec grep -li SuchstringA {} \; >> Ergebnis.txt
    ("grep -r" geht leider nicht auf dem System)

    Ich weiß aber leider nicht wie ich den SuchstringB unter bekommen soll.

    Vielen Dank schon mal
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Pik-9

    Pik-9 Tripel-As

    Dabei seit:
    04.12.2008
    Beiträge:
    186
    Zustimmungen:
    1
    Wenn sowohl str_a, als auch str_b in einer Zeile enthalten sein sollen, kannst du das über folgende Regular Expression realisieren:
    Code:
    grep -lie "\(str_a.*str_b\)\|\(str_b.*str_b\)" <file>
    Du suchst also nach Zeilen, die entweder der Form
    str_a [...] str_b
    oder
    str_b [...] str_a
    entsprechen.

    Viele Grüße,
    Pik-9
     
  4. Pik-9

    Pik-9 Tripel-As

    Dabei seit:
    04.12.2008
    Beiträge:
    186
    Zustimmungen:
    1
    Falls du mit Solaris arbeitest, kannst du es mal mit
    Code:
    ggrep -r
    versuchen. Und falls das noch nicht installiert ist, mit
    Code:
    pkg install gnu-grep
    nachinstallieren.

    Viele Grüße,
    Pik-9
     
  5. Ray_87

    Ray_87 Grünschnabel

    Dabei seit:
    29.08.2017
    Beiträge:
    5
    Zustimmungen:
    0
    Vielen Dank schon mal.

    Geht aber leider nicht:

    Code:
    $ find . -type f -exec grep -lie "\(work.*data\)\|\(data.*work\)"  {} \; >> Ergebnis.txt
    grep: illegal option -- e
    Usage: grep -hblcnsviw pattern file . . .
    grep: illegal option -- e
    Usage: grep -hblcnsviw pattern file . . .
    grep: illegal option -- e
    [ . . .]
    $ man ggrep
    No manual entry for ggrep.
    $ ggrep
    ksh: ggrep:  not found
    $
    
    Ggrep scheint nicht vorhanden zu sein und für Installationen fehlen mir die Rechte.
     
  6. #5 hellfire, 30.08.2017
    hellfire

    hellfire Foren As

    Dabei seit:
    25.05.2016
    Beiträge:
    90
    Zustimmungen:
    11
    Einfacher, aber inperformanter - weil ein Teil de Dateien 2x verarbeitet wird - ist das hier:

    Code:
    find /SuchVerzeichnis/ -type f -exec grep --null -li SuchstringA "{}" + \
       | xargs --null grep -li "SuchstringB" >ergebnis.txt
    Das --null bei xargs und bei grep sorgen dafür, dass Dateinamen mit einem Nullbyte getrennt werden und nicht mit einem Leerzeichen. Das sollte gewährleisten, dass auch Datein mit Leerzeichen im Namen korrekt verarbeitet werden.

    Falls es sich bei SuchStringA/B um festen Text handelt(Im Gegensatz zu variablen Mustern), dann empfehle ich fgrep zu verwenden statt dem normalen grep. Der ist wesentlich schneller.
     
  7. #6 Pik-9, 30.08.2017
    Zuletzt bearbeitet: 30.08.2017
    Pik-9

    Pik-9 Tripel-As

    Dabei seit:
    04.12.2008
    Beiträge:
    186
    Zustimmungen:
    1
    Hi,

    versuch doch noch mal:
    Code:
    /usr/xpg4/bin/grep -RliE '(work.*data)|(data.*work)' <directory>
    Wenn das nicht gefunden wird, solltest du noch mal sagen, auf welchem Unix System du dich genau befindest.

    Viele Grüße,
    Pik-9
     
  8. Ray_87

    Ray_87 Grünschnabel

    Dabei seit:
    29.08.2017
    Beiträge:
    5
    Zustimmungen:
    0
    Danke für die Hilfe und Anregung.

    Ich habe es mittlerweile mit einem Kollegen so gelöst:
    Code:
    find /data/archive/ -type f -exec grep -l StringA {} \; > /data/work/CEC/test/ergebnis1 && find /data/archive/ -type f -exec grep -l StringB {} \; > /data/work/CEC/test/ergebnis2 && comm -1 -2 /data/work/CEC/test/ergebnis1 /data/work/CEC/test/ergebnis2 > /data/work/CEC/test/gesamt.txt
    Erklärung:
    • Schreibe Dateien mit StringA in Ergenis1;
    • Schreibe Dateien mit StringB in Ergenis2;
    • Vergleiche Ergenis1 und Ergenis2 und schreibe die Gemeinsamkeiten in gesamt.txt

    (Da die Zeile aber zu lang ist, habe ich es in ein Skript gepackt)
     
  9. Anzeige

    Vielleicht findest du in dieser Kategorie etwas passendes.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. Pik-9

    Pik-9 Tripel-As

    Dabei seit:
    04.12.2008
    Beiträge:
    186
    Zustimmungen:
    1
    Auf diese Weise wird aber nicht sichergestellt, dass sich work und data in der selben Zeile befinden.
    Zum Beispiel die Datei:
    Code:
    Line 1: work
    Line 2: data
    Wird so in der Datei gesamt.txt auftauchen. Ist es das was du wolltest?

    Viele Grüße,
    Pik-9
     
  11. Ray_87

    Ray_87 Grünschnabel

    Dabei seit:
    29.08.2017
    Beiträge:
    5
    Zustimmungen:
    0
    Dass sich StringA und StringB in der selben Zeile befinden war nicht gefordert. Beide Strings muss nur irgendwo in der gleichen Datei auftauchen.

    Die gesamt.txt enthält den Pfad von den Dateien wo beide Strings auftauchen.
     
Thema:

Dateien in Unix finden, die mehrere Strings beinhalten

Die Seite wird geladen...

Dateien in Unix finden, die mehrere Strings beinhalten - Ähnliche Themen

  1. Dateien von Linux & Unix auf eine Windowsfreigabe kopieren - wie geht das?

    Dateien von Linux & Unix auf eine Windowsfreigabe kopieren - wie geht das?: Hallo, wie kann ich mit einfachen Linuxmitteln Dateien auf eine Windowsfreigabe kopieren ohne irgendwelche Tools geschweige denn die grafische...
  2. Wie kann ich unter Unix (AIX) schnell viele Dateien löschen ?

    Wie kann ich unter Unix (AIX) schnell viele Dateien löschen ?: Ich habe eine NAS-Platte gemountet, auf der unzählige Logfiles liegen. Die Ältesten möchte ich nun zwecks Bereinigung löschen. Das dauert...
  3. UltraEdit "verliert" regelmässig meine Unix-Dateien

    UltraEdit "verliert" regelmässig meine Unix-Dateien: Hallo zusammen, ich habe mir jetzt schon seit Jahren die verschiedensten Unix-Maschinen gemountet, um die Dateien im UltraEdit-Editor...
  4. Eint Unixbefehl mit dem man viele Texdateien auf einmal miteinander vergleichen kann

    Eint Unixbefehl mit dem man viele Texdateien auf einmal miteinander vergleichen kann: Hi , ich suche einen Unixbefehl oder ein Unixtool mit dem man verschiedene txt files miteinander vergleichen kann. Folgendes Szenario: Ich...
  5. BRAUCH HILFE: Unix Programm zum verschieben von Dateien!

    BRAUCH HILFE: Unix Programm zum verschieben von Dateien!: Hallo! Ich bin Unix-Einsteiger und brauch jetzt ein Programm, welches mir aus einem Ordner alle Dateien (keine Unterverzeichnisse oder...