2013-07-12 37 views
16

Tôi có một tệp văn bản lớn. Tôi cần trích xuất tất cả các dòng có chứa từ chính xác "DUSP1". Dưới đây là ví dụ về các dòng:Grep trích xuất chỉ toàn bộ từ

9606 ENSP00000239223 DUSP1 BLAST 
9606 ENSP00000239223 DUSP1-001 Ensembl 

Tôi muốn truy xuất dòng đầu tiên chứ không phải dòng thứ hai.

Tôi đã thử nhiều lệnh như:

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

Nhưng không ai trong số họ có vẻ làm việc. Tôi nên sử dụng tùy chọn nào?

+0

Chính xác "từ chính xác" được xác định như thế nào? Và ví dụ thứ 3 của bạn sẽ chỉ tìm các dòng chỉ với từ "DUSP1" ... Vì vậy, bạn muốn dòng với "^ DUSP1 [[: dấu cách:]] +"? –

+3

Bạn có thể cung cấp nội dung tệp mẫu không. Lệnh thứ 2, thứ 3, thứ 4 hoạt động cho tôi. – falsetru

Trả lời

13

Sự cố bạn đang gặp phải là dấu gạch ngang (-) được xem là grep làm dấu phân tách từ.

Bạn nên thử lệnh này:

grep '\sDUSP1\s' file 

để đảm bảo rằng có không gian xung quanh từ bạn.

+0

Xem bài viết đã chỉnh sửa của tôi –

+0

Vâng! Điều này hoạt động tuyệt vời! Cảm ơn –

2

thêm vào những gì sputpick nói, nó có thể một trong hai thể là hay:

grep '\sDUSP1$' file 

nếu DUSP1 là kết thúc của dòng.

29

Nếu bạn muốn grep chính xác toàn bộ văn bản, bạn có thể sử dụng ranh giới từ như thế này:

grep '\bDUSP1\b' 

này phù hợp cho chính xác từ lúc đầu và lúc kết thúc.

+5

Đây phải là câu trả lời được chấp nhận, không phải lúc nào cũng có khoảng trống trước và sau (điều gì sẽ xảy ra khi đó là từ cuối cùng?). – user3671607

+1

điều này thật tuyệt. Nó cũng khớp với 'setting = DUSP1' và' my/folder/to/DUSP1', nhưng không phải 'DUSP123' – vikingsteve

+0

Tôi phải sử dụng dấu ngoặc kép cho phiên bản Windows của GNU grep. Dấu nháy đơn không hoạt động. –