2013-07-12 14 views
16

Büyük bir metin dosyasına sahibim. "DUSP1" kelimesini içeren tüm satırları çıkarmam gerekiyor. çizgilerin İşte bir örnek:Grep sadece tüm kelimeleri ayıkla

9606 ENSP00000239223 DUSP1 BLAST 
9606 ENSP00000239223 DUSP1-001 Ensembl 

Ben ilk satırı ancak ikinci bir almak istiyor.

ben gibi çeşitli komutlar çalıştı:

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

Ama bunların hiçbiri çalışmıyor gibi görünüyor. Hangi seçeneği kullanmalıyım?

+0

"Tam sözcük" nasıl tanımlanır? Ve 3. örneğiniz sadece "DUSP1" kelimesi olan satırları bulacaktır ... Yani "^ DUSP1 [[: space:]] +" ile satırları mı istiyorsunuz? –

+3

Örnek dosya içeriği verebilir misiniz? 2., 3., 4. komutlar benim için çalışıyor. – falsetru

cevap

13

Karşılaştığınız sorun, bir tire (-) ifadesinin grep bir sözcük ayırıcı olarak kabul edildiğidir.

Bu komutu denemelisiniz:

grep '\sDUSP1\s' file 

Sözünün etrafında boşluk olmamasını sağlamak için.

+0

Düzenlenmiş mesaja bak –

+0

Evet! Bu harika çalışıyor! Teşekkürler –

2

sözü sputpick ne ekleyerek, bu olması veya ya: DUSP1 çizginin sonu

grep '\sDUSP1$' file 

eğer. Tam olarak tüm kelimeyi grep istiyorsanız

29

, böyle sözcük sınırları kullanabilirsiniz:

grep '\bDUSP1\b' 

Bu başlangıçta tam olarak bir kelimeyi ve sonunda eşleşir.

+5

Bu kabul edilen cevap olmalı, her zaman önce ve sonra boşluklar (ne zaman son söz?). – user3671607

+1

bu harika. Aynı zamanda 'setting = DUSP1' ve'/klasör/to/DUSP1' ile eşleşir, ancak 'DUSP123' – vikingsteve

+0

GNU grep'in Windows sürümü için çift tırnak kullanmam gerekti. Tek tırnaklar işe yaramadı. –