2013-07-12 20 views
16

Ho un grande file di testo. Ho bisogno di estrarre tutte le linee che contengono la parola esatta "DUSP1". Ecco un esempio delle linee:Estratto di grep solo parola intera

9606 ENSP00000239223 DUSP1 BLAST 
9606 ENSP00000239223 DUSP1-001 Ensembl 

voglio recuperare la prima linea, ma non il secondo.

Ho provato diversi comandi come:

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

Ma nessuno di loro sembra funzionare. Quale opzione dovrei usare?

+0

Come viene definita esattamente la "parola esatta"? E il tuo terzo esempio troverebbe solo linee con la parola "DUSP1" ... Quindi vuoi le linee con "^ DUSP1 [[: space:]] +"? –

+3

Puoi fornire il contenuto del file di esempio. Il 2 °, 3 °, 4 ° comando funziona per me. – falsetru

risposta

13

Il problema che si presenta è che un trattino (-) è considerato da grep come delimitatore di parole.

Si dovrebbe provare questo comando:

grep '\sDUSP1\s' file 

per garantire che ci sia spazio intorno alla vostra parola.

+0

Vedere il mio post modificato –

+0

Sì! Funziona alla grande! Grazie –

2

aggiunta a quanto detto sputpick, potrebbe essere che sia o:

grep '\sDUSP1$' file 

se il DUSP1 è la fine della linea.

29

Se si vuole grep esattamente l'intera parola, è possibile utilizzare i confini di parola in questo modo:

grep '\bDUSP1\b' 

Ciò corrisponde per la parola esatta, all'inizio e alla fine.

+5

Questa dovrebbe essere la risposta accettata, non ci sono sempre spazi prima e dopo (che dire quando è l'ultima parola?). – user3671607

+1

questo è fantastico. Corrisponde anche a 'setting = DUSP1' e' my/folder/a/DUSP1', ma non 'DUSP123' – vikingsteve

+0

Ho dovuto usare doppi apici per la versione Windows di GNU grep. Le virgolette non funzionavano. –