grep und '(' Zeichen



  • Hallo, ich habe mal eine bloede Frage zu grep und regular expressions. Also ich wollte einfach folgendes machen:

    grep -r "foo\(" ./
    

    Egal, was ich mit dem '(' Zeichen auch mache, grep versteht es nicht und antwortet jedesmal mit:

    grep: Unmatched ( or \(
    

    Wie erklaere ich grep, dass ich nach einem Pattern mit einem '(' Zeichen suche?



  • Weil "\(" eine besondere Bedeutung hat?
    http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexp-Backslash.html
    Ist zwar emcas, aber das grouping via "\( .. \)" wird auch hier für grep erwähnt:
    http://www.gnu.org/software/findutils/manual/html_node/find_html/grep-regular-expression-syntax.html

    (1 Minute google "backslash in regexp" und "backslash in grep regexp")



  • grepmaxologe schrieb:

    (1 Minute google "backslash in regexp" und "backslash in grep regexp")

    Pow!! Nur eine Minute gegoogelt!! Nach Begriffen, die - fuer mich als Anfaenger
    zumindest - nicht einmal unbedingt etwas mit meiner Frage zu tun gehabt haetten.
    Ich hatte da eher nach "parenthesis" und "grep" gegoogelt... Naja, und dann als
    Antwort herauszubekommen, dass es SO NICHT geht (im Emacs), das nenn ich ne
    Leistung!!! Fehlt nur noch die Antwort auf meine Frage, wie es denn nun eig geht.

    Gut, dann werde ich mich mal etwas tiefer einarbeiten, in den Emacs, um dann auch
    irgendwann grep zu verstehn... lol. Danke, trotzdem! 👍



  • Du brauchst jetzt kein emacs, das war nur die erste Seite die ich angeklickt hab, die im Google-Kurztext vielversprechend aussah.

    Sag doch einfach, was du machen willst! Wenn du eine pattern suchst, die "foo(" enthält, geht das ganz einfach so:

    grep "foo(" *
    

    Willst du die Zeile + file mitbekommen:

    grep -nH "foo(" *
    

    z.B.:

    $ grep -nH "while (" *
    ada-exp.c:353:#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
    ada-exp.c:399:      while (0)
    ada-exp.c:417:    while (0)
    ada-exp.c:975:while (0)
    ada-exp.c:1011:} while (0)
    ada-exp.c:1017:} while (0)
    ada-exp.c:1028:} while (0)
    ada-exp.c:1055:} while (0)
    ada-exp.c:1085:} while (0)
    ada-exp.c:1138:  while (*yys++ != '\0')
    ada-exp.c:1164:  while ((*yyd++ = *yys++) != '\0')
    ada-exp.c:2601:  while (*renaming_expr == 'X')
    ada-exp.c:2829:  while (*sels != '\0')
    [usw... gdb macht das scheinbar oft ;)]
    

    Also Problem genauer beschreiben, bitte, danke 🙂


Anmelden zum Antworten