2011-09-07 23 views
7

Tôi muốn sử dụng grep cùng với tệp từ dừng để lọc ra các từ tiếng Anh thông dụng từ một tệp khác. Tệp "somefile" chứa một từ trên mỗi dòng.Sử dụng grep để lọc ra các từ khỏi tệp từ dừng

cat somefile | grep -v -f stopwords 

Vấn đề với phương pháp này là: Nó kiểm tra xem một từ trong các tệp từ dừng xảy ra trong somefile, nhưng tôi muốn điều ngược lại, ví dụ: kiểm tra xem một từ trong somefile xảy ra trong từ dừng.

Cách thực hiện việc này?

Ví dụ

somefile chứa sau:

hello 
o 
orange 

các tệp từ dừng chứa sau:

o 

Tôi muốn lọc ra chỉ có chữ "o" từ somefile, không xin chào và màu cam.

Trả lời

14

Tôi nghĩ về nó một số chi tiết, và tìm thấy một giải pháp ...

sử dụng -w tắc của grep để phù hợp với toàn bộ từ:

grep -v -w -f stopwords somefile 
+1

hoặc 'grep -v -w -f stopwords somefile' tránh lệnh' cat' – Matthias

+1

Tôi đã thay đổi câu trả lời dựa trên đề xuất dọn dẹp của bạn @Matthias –

5

Giả sử bạn có các tệp từ dừng tập tin/tmp/chữ:

in 
the 

bạn có thể tạo từ nó chương trình sed bởi:

sed 's|^|s/\\<|; s|$|\\>/[CENSORED]/g;|' /tmp/words > /tmp/words.sed 

cách này bạn sẽ nhận được /tmp/words.sed:

s/\<in\>/[CENSORED]/g; 
s/\<the\>/[CENSORED]/g; 

và sau đó sử dụng nó để kiểm duyệt bất kỳ tập tin văn bản:

sed -e -f /tmp/words.sed /input/file/to/filter.txt > /censored/output.txt 

Các -e là cần thiết cho sed để hiểu mở rộng regexp cần thiết để nhận dạng. Tất nhiên bạn có thể thay đổi [censored] thành bất kỳ chuỗi nào khác hoặc chuỗi trống nếu bạn muốn.

Giải pháp này sẽ xử lý nhiều từ trong dòng cũng như một từ trên mỗi tệp dòng.

Các vấn đề liên quan