2013-07-12 11 views
16

Ich habe eine große Textdatei. Ich muss alle Zeilen extrahieren, die das genaue Wort "DUSP1" enthalten. Hier ein Beispiel für die Linien:Grep-Extrakt nur ganzes Wort

9606 ENSP00000239223 DUSP1 BLAST 
9606 ENSP00000239223 DUSP1-001 Ensembl 

Ich möchte die erste Zeile abzurufen, aber nicht die zweite.

Ich habe versucht, mehrere Befehle wie:

grep -E "^DUSP1" 
grep '\<DUSP1\>' 
grep '^DUSP1$' 
grep -w DUSP1 

Aber keiner von ihnen scheint zu funktionieren. Welche Option sollte ich verwenden?

+0

Wie genau ist das "exakte Wort" definiert? Und Ihr drittes Beispiel würde nur Zeilen finden, die nur das Wort "DUSP1" enthalten ... Sie wollen also Zeilen mit "^ DUSP1 [[: space:]] +"? –

+3

Konnten Sie Beispieldateiinhalt zur Verfügung stellen. Der 2., 3., 4. Befehl funktioniert für mich. – falsetru

Antwort

13

Das Problem Sie konfrontiert ist, dass ein Strich (-) wird von grep als Worttrennzeichen betrachtet.

sollten Sie diesen Befehl versuchen:

grep '\sDUSP1\s' file 

um sicherzustellen, dass um Ihr Wort Räume gibt.

+0

Siehe meinen bearbeiteten Beitrag –

+0

Yeah! Das funktioniert großartig! Danke –

2

Zugabe zu dem, was gesagt sputpick, könnte es entweder das, oder:

grep '\sDUSP1$' file 

wenn die DUSP1 das Ende der Leitung ist.

29

Wenn Sie genau das ganze Wort grep möchten, können Sie Wortgrenzen wie folgt verwenden:

grep '\bDUSP1\b' 

Das passt für die genaue Wort am Anfang und am Ende.

+5

Dies sollte die akzeptierte Antwort sein, es gibt nicht immer Leerzeichen davor und danach (was ist, wenn es das letzte Wort ist?). – user3671607

+1

das ist großartig. Es entspricht auch 'setting = DUSP1' und' my/folder/to/DUSP1', aber nicht 'DUSP123' – vikingsteve

+0

Ich musste doppelte Anführungszeichen für die Windows-Version von GNU grep verwenden. Einfache Anführungszeichen funktionierten nicht. –

Verwandte Themen