Ich möchte Wörter finden, die mit () enden … Mit dem Grep-Befehl in Linux.
grep Dateiname_wo_ich_suchen_möchte "*()"
sowas in der Art...aber es funktioniert nicht
Antwort1
$ cat <<EOF > test
foo bar
foo bar() baz
foo.bar() baz
foo bar baz()
foobarbaz() foo bar()baz
EOF
$ grep -o '\w\+()' test
bar()
bar()
baz()
foobarbaz()
bar()
-o
bedeutet "nur übereinstimmende Teile drucken", also nicht die ganze Zeile\w
bedeutet „ein Zeichen innerhalb eines Wortes“\+
bedeutet „die vorherige Entität ein oder mehrere Male“
Bedeutet also grep -o '\w\+()'
„drucke alles aus, was aus einem oder mehreren Wortzeichen gefolgt von () besteht“.
Dies wird immer noch z. B. dem bar()
Teil von entsprechen bar()baz
. Man könnte argumentieren, dass die Klammern das Wort tatsächlich beenden, was bar()
„ein Wort ergibt, das mit () endet“. Ich gehe davon aus, dass dies in Ihrem tatsächlichen Anwendungsfall ohnehin kein Problem ist.
Antwort2
Escapen Sie das () wie folgt. Wenn dies am Ende der Zeile steht, sollten Sie den regulären Ausdruck (egrep) verwenden.
egrep file_name_where_i_want_to_search ".*\(\)$"