grep/sed: Nur ganze Wörter suchen

Post Reply
Message
Author
Pantherin

grep/sed: Nur ganze Wörter suchen

#1 Post by Pantherin »

Hallo,

ich würde gerne mehrere Textdateien durchsuchen nach bestimmten Wörtern. Jedoch bekomme ich es nicht hin, nur nach ganzen Wörtern zu suchen

Als Beispiel:

"Katze" soll gefunden (bzw. ersetzt) werden aber eben nicht "Katzenfutter" oder "Raubkatze".
Sowohl kontextsensitiv als auch kontestinsensitiv (verschieden durchläufe). Ist das möglich ?

Dritter Fall: Katze mit einem beliebeigen folgenden Zeichen, z.B. vor einem Komma oder als Satzende. Also eine Wildcard für ein Zeichen. "Katze?" bzw. "Katze[.|,|;]"

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Bei sed und grep sollte \< und \> für Wortanfang/Wortende funktionieren:

Code: Select all

grep '\<Katze\>' datei
sed -e 's/\<Katze\>/Hund/g' datei > ausgabe
Jochen
Die grösste Lüge der EDV? "Mal eben..."

kanonenfutter
Posts: 266
Joined: 10. Sep 2004 14:37
Contact:

#3 Post by kanonenfutter »

bei grep geht auch "-w".
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/

Pantherin

#4 Post by Pantherin »

Danke. Klappt aber beides nicht:

Code: Select all

bash-2.05b$ grep '\<katzen\>' test
Nachts sind alle katzen grau
Nachts sind alle -katzen grau
Nachts sind alle katzen. grau
"-katzen" und "katzen." hätte nicht gefunden werden dürfen, wurden aber. "raubkatzen" haben die Konstrukte dagegen korrekterweise nicht gefunden. Das verstehe, wer will

User avatar
Scory
Posts: 188
Joined: 16. Apr 2004 12:36

#5 Post by Scory »

Doch, ist vollständig richtig: ein Punkt und ein Minus sind "Wortgrenzen".

Pantherin

#6 Post by Pantherin »

Das ist ja ärgerlich. Wie teile ich grep bzw. sed mit, nur das Leerzeichen als Wortgrenze zu nehmen ? Und wo bekomme ich einen Überblick über existierende Wortgrenzen her ?

User avatar
Scory
Posts: 188
Joined: 16. Apr 2004 12:36

#7 Post by Scory »

> Wie teile ich grep bzw. sed mit, nur das Leerzeichen als Wortgrenze zu nehmen ?

Indem Du Leerzeichen im Suchmuster angibst:

grep -i ' katzen ' test

Pantherin

#8 Post by Pantherin »

Oh, Gott, das war so naheliegend ....

Danke, wenn auch leicht beschämt

Post Reply