Befehl text zu durchsuchen?


  • BadAzz
  • 931 Aufrufe 9 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Befehl text zu durchsuchen?

    Hi,

    ich möchte ein programm schreiben, dass einen Text nach einem eingelesenen Word durchsucht. Gibt es einen Befehl unter Linux dafür, der sowas automatisch macht?
  • hmm bin mir nicht sicher ob es das ist was du suchst...

    das ganze braucht natürlich Admin-Rechte, dann bist du sicher das alle Dateien durchsucht werden.

    Der Befehl setzt sich folgendermassen zusammen:

    'find' ....

    1. Festlegen eines Startverzeichnisses
    also z.b.
    find /usr/local ...

    2. die Suchbedingungen
    Hier würde ich
    '-name' vorschlagen, also der Name der Datei und dann *readme*
    wobei die Shell natürlich die * nicht auswerten darf, also ist wichtig das ganze in Backslashs oder Apostrophe zu stellen
    find /usr/local -name /*readme*/

    3. Um jetzt in allen gefundenen readme an den Dateiinhalt zu kommen nehm ich mal
    xargs
    das prog greift für jeden gefundenen Namen auf den jeweiligen Dateiinhalt zu.
    find /usr/local -name /*readme* | xargs

    4. Die Dateinamen werden nun an das 'grep'-Kommando übergeben, das die Inhalte untersucht.
    find /usr/local -name /*readme* | xargs grep

    5. Dann brauch grep noch ein paar Optionen für die Ausgabe
    (i = Groß/Kleinschreibung ignorieren)
    (l = nur Dateinamen ausgeben)

    find /usr/local -name /*readme* | xargs grep -il PPP

    als Ergebnis sollte dann sowas wie

    /usr/local/yxz/readme
    /usr/local/asd/readme
    /usr/local/dfg/readme
    .
    .
    .

    nun kannst den Kram mitm Editor untersuchen...

    so long
  • einen Text nach einem eingelesenen Word durchsucht


    wie Kappa schon sagt, der Befehl lautet grep

    um das komplette System zu durchsuchen, koennte der Befehl lauten:

    find / -type f -exec grep 'Suchbegriff' {} \; -print 2>/dev/null
    (Leerzeichen beachten!!!)

    als Ergebnis bekommst du alle Zeilen, die den Suchbegriff beinhalten, sowie den jeweils absoluten Dateipfad

    Solltest du wirlich nur einen bestimmten, in Dateiform vorliegenden Text durchsuchen wollen, dann oeffne die Datei mit dem vi-Editor, z.B.: vi Test.txt. Gib dann einen Slash ein und dahinter unmittelbar den Suchbegriff, also: /Suchbegriff. Sollte der Begriff gefunden werden, wird er highlighted. Mit n kannst du weitersuchen und mit N rueckwaerts suchen.
  • Erst mal danke für die schnellen Antworten.

    Juergen:
    Wenn ich das richtig versteheh muss ich dann die Textdatei öffnen.
    Gibt es eine Möglichkeit den Text nach dem Wort zu durchsuche, ohne die Datei zu öffnen?

    Vielleicht sollte ich mal erklähren, was ich mir genau vorstelle:

    Ich habe verschiedene Textdateien.
    Ich will in dem Programm ein Wort einlesen, und das Programm soll dann überprüfen, und ausgeben, in welchen der Dateien das Wort vorkommt.
  • ahhh also doch ;)

    dann beschäftige dich mal mit meiner Erklärung.

    Hätte ich noch ein wenig ausführlicher machen sollen...

    find /usr/local -name /*readme* | xargs grep -il PPP

    Du brauchst DIESEN Befehl!

    mit -name /*readme*/
    sucht er nach files mit dem Namen 'readme'
    Durch die // wird die Shell daran gehindert, die * auszulesen.
    Also wenn du nach ner *.txt
    suchen willst mußt du die // weglassen ;)

    xargs ist in der lage in eine Datei zu 'sehen' ohne diese zu öffnen...
    und mit grep wird der gefundene Wert ausgelesen.

    Am Ende (PPP) steht halt das Wort wonach du suchen willst.

    so long
  • Jo das funktiniert!

    Aber eine Frage hab ich noch:
    Ich will das ganze in ein C Programm einbauen. Kann ich die eingelesene Variable in den System Befehl einbaun? Wenn ich es so mache:
    system("...grep -il %s *.html",suchbegriff);
    sagt der Kompiler:
    too many arguments in funktion 'system'

    Hat jemand einen Vorschlag wie das funktionieren könnte?
  • Original geschrieben von BadAzz
    Jo das funktiniert!

    Aber eine Frage hab ich noch:
    Ich will das ganze in ein C Programm einbauen. Kann ich die eingelesene Variable in den System Befehl einbaun? Wenn ich es so mache:
    system("...grep -il %s *.html",suchbegriff);
    sagt der Kompiler:
    too many arguments in funktion 'system'

    Hat jemand einen Vorschlag wie das funktionieren könnte?

    Quellcode

    1. char* buffer[255];
    2. sprintf(buffer, "...grep -il %s *.html", suchbegriff);
    3. system(buffer);