heinetz: wie geht's mit grep?

hallo forum,

ich programmiere eine volltext-suche auf einer
php-anwendung. aus performance-gruenden wuerde ich gerne per php einen kommandozeilen-befehl auf die maschine absetzen z.b. grep. das funktioniert auch soweit ganz gut. aber noch nicht ganz so, wie ich es gerne haette:

ich haette gerne die anzahl der fundstellen im file gewusst.

das habe ich zuerstmal mit grep und der option -c versucht. sah auch erstmal richtig aus, bis ich feststellte, dass es nicht die anzahl der fundstellen wiedergegeben wurde, sondern die anzahl der zeilen, in denen der suchstring gefunden wurde.

jetzt frag ich mich (der von unix nix weiss), ob man die anforderung ueberhaupt mit grep loesen kann, oder ob dazu ein anderes tool
bemuehen soll.

von mir selbst habe ich bisher keine antwort bekommen;)

danke fuer deinen tip,
viele gruesse,
martin

  1. Tach,

    das habe ich zuerstmal mit grep und der option -c versucht. sah auch erstmal richtig aus, bis ich feststellte, dass es nicht die anzahl der fundstellen wiedergegeben wurde, sondern die anzahl der zeilen, in denen der suchstring gefunden wurde.

    "grep Datei Suchstring | wc -l" sollte tun was du suchst.

    mfg
    Woodfighter

    --
    Professor Henry Jones: The Name of God.
    Indiana Jones: The Name of God. Jehovah.
    Professor Henry Jones: But in the Latin alphabet, "Jehovah" begins with an "I".
    Indiana Jones: J-...
    1. moin,

      "grep Datei Suchstring | wc -l" sollte tun was du suchst.

      klingt gut. bin neugierig: kannst du mir das kurz erlaeutern?

      grep ohne parameter, pipe leitet die ausgabe nach wc (koennte wordcount sein?) mit dem parameter -l.

      umgesetzt sieht das ganze bei mir so aus:
      -----------------------------------------
      exec ("grep _content/sites/anforderungen.php "SEB"  | wc -l", $output);
      -----------------------------------------

      $output schmeisst ne 0 raus, die nicht definitiv stimmt. wat nu?

      schoenen dank erstmal,

      schoene gruesse,
      martin

      1. Tach,

        "grep Datei Suchstring | wc -l" sollte tun was du suchst.

        klingt gut. bin neugierig: kannst du mir das kurz erlaeutern?

        mal sehen:

        grep ohne parameter, pipe leitet die ausgabe nach wc (koennte wordcount sein?) mit dem parameter -l.

        wc=wordcount, -l gibt die Anzahl der Zeilen einer Datei aus. grep ohne Parameter gibt alle Zeilen aus, in denen der Suchbegriff gefunden wird; die werden dann gezählt.

        exec ("grep _content/sites/anforderungen.php "SEB"  | wc -l", $output);
        $output schmeisst ne 0 raus, die nicht definitiv stimmt. wat nu?

        Das liegt daran, daß man mir nie alles glauben sollte, wenn ich es nicht per copy und Paste übernehme: Der Suchstring muß vor dem Dateinamen stehen.

        mfg
        Woodfighter

        --
        Im Selfforum:
        > Zweites Frame durch Doppelverlinkung öffnen?
        Nutze die Archivsuche dieses Forums. Suche nach "Jehova". -MudGuard
        1. hello,

          wc=wordcount, -l gibt die Anzahl der Zeilen einer Datei aus. grep ohne Parameter gibt alle Zeilen aus, in denen der Suchbegriff gefunden wird; die werden dann gezählt.

          also: grep zeigt mir welche zeilen das suchmuster enthalten und wc -l zaehlt die zeilen einfach zusammen. klingt gut.

          -----------------------------------------------
          Klaus mag Liesa.
          Liesa steht nicht auf Klaus.

          grep "Lisa" prosa.txt ergibt

          "
          Klaus mag Lisa.
          Lisa steht nicht auf Klaus.
          "

          wc -l zaehlt dann die zeilen dieser ausgabe.

          --> 2, richtig (2 mal Lisa) in prosa.txt

          aber:

          Klaus mag Liesa, obwohl Lisa ihn nicht mag.

          ...ergibt eine zeile, die da gezaehlt wird und ich weiss immernoch nicht wie oft Liesa in prosa.txt vorkommt. uebrigens gibt es fuer grep die option -c, die auch die ausgabe der zeilen unterdrueckt und nur die zeilen zaehlt.

          schade, schoene idee gewesen.

          viele gruesse,
          martin
          -----------------------------------------------
           scheint aber das gleiche zu machen, als wuerde man grep den parameter -c mitgeben.

          exec ("grep _content/sites/anforderungen.php "SEB"  | wc -l", $output);
          $output schmeisst ne 0 raus, die nicht definitiv stimmt. wat nu?

          Das liegt daran, daß man mir nie alles glauben sollte, wenn ich es nicht per copy und Paste übernehme: Der Suchstring muß vor dem Dateinamen stehen.

          mfg
          Woodfighter

  2. hi,

    ich programmiere eine volltext-suche auf einer
    php-anwendung. aus performance-gruenden wuerde ich gerne per php einen kommandozeilen-befehl auf die maschine absetzen z.b. grep. das funktioniert auch soweit ganz gut. aber noch nicht ganz so, wie ich es gerne haette:

    Also was mich daran stören würde ist die Tatsache, dass grep einwenig unkomfortabel ist und das Kommando alleine keine komplexen Suchbegriffe like "(foo AND bar) NOT age" ermöglicht.

    Da ists schon besser mit einem Indexer zu arbeiten oder ein fertiges Modul wie z.B. Text::Query (PERL) zu verwenden; ist der zu durchsuchende Content vom HTML-Layout getrennt, ergeben sich damit interessante Möglichkeiten einer Volltextsuche ohne Index. Dazu hab ich mal einen Artikel geschrieben:

    http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?display=16&id=12

    Rolf

    --
    KnowHow veröffentlichen statt Patentieren!