2009-07-28 41 views
6

Tôi có một tập hợp các tập tin văn bản unicode (xuất từ ​​regedit) và tôi muốn kéo ra tất cả các dòng với một văn bản nhất định trên chúng.Chương trình miễn phí để grep tập tin văn bản unicode trong Windows?

Tôi đã thử Grep for Windows và findstr nhưng cả hai dường như không thể xử lý mã hóa unicode. Kết quả của tôi trống, nhưng khi tôi sử dụng tùy chọn -v (hiển thị các dòng không khớp), đầu ra hiển thị NUL giữa mỗi ký tự.

Có bất kỳ tùy chọn miễn phí nào để thực hiện grep đơn giản trên các tệp Unicode trong Windows không?

+0

Sử dụng tìm, không tìm thấy. – Chalky

Trả lời

8

Chỉ cần chạy qua grepWin hoạt động hoàn hảo cho những gì tôi muốn ở đây. Ước gì tôi đã tìm thấy nó trước đó!

0

là tùy chọn Cygwin cho bạn? có lẽ là grep được xây dựng trong cư xử tốt hơn so với một bạn đã cố gắng ...

liên quan

+0

Thật không may, đó không phải là quan sát của tôi. Tôi đang đối phó với vấn đề này, và Cygwin GREP là điều đầu tiên tôi đã thử. Cả hai Cygwin GREP và UnxUtils GREP dường như chỉ để tìm kết quả nếu tôi chuyển đổi các tập tin sang ASCII (hoặc ít nhất là UTF-8). – user1172763

0

séc ra BareGrep. Tôi nghĩ rằng nó sẽ làm những gì bạn muốn.

+0

Chương trình khá thú vị nhưng dường như không hoạt động với văn bản unicode - tôi có thiếu gì đó không? – jacobsee

+0

Cá nhân tôi đã không mệt mỏi với Unicode, nhưng tuyên truyền bán hàng của họ nói rằng nó sẽ. họ có thể (và có lẽ là), tất nhiên, đang nói dối. –

+0

Nó không xử lý các tệp UTF16 (tôi sở hữu phiên bản chuyên nghiệp) và đang tìm kiếm một công cụ thay thế khi tôi nhấn trang này. – scottwed

9

Vâng, trong khi findstr không thể xử lý Unicode tập tin trực tiếp, type làm và findstr thực sự xử lý Unicode đầu vào không có vấn đề.

Vì vậy, những gì bạn cần làm sẽ chỉ được

type myfile.txt | findstr /c:"I'm searching for this" 
 
> type uc-test.txt 
Unicode test. äöüß 
Another line 
Something else 
> findstr "Something" uc-test.txt 

> findstr /v "Something" uc-test.txt 
■U n i c o d e t e s t . õ ÷ ³ ▀ 
A n o t h e r l i n e 
S o m e t h i n g e l s e 
> type uc-test.txt | findstr "Another" 
Another line 
+0

Tôi không gặp vấn đề gì với findstr và unicode. Dường như làm việc tốt. Cũng nên thêm rằng bạn có thể tìm kiếm với các biểu thức thông thường bằng cách chuyển trong chuyển đổi/r. Giống như grep nó cũng có trường hợp bỏ qua và liệt kê các tệp, v.v. –

+1

hoạt động cho một tệp duy nhất - vẫn đang tìm kiếm một thay thế grep để tôi có thể chọn một dòng từ mỗi tệp, mỗi tệp trong thư mục con của riêng chúng – jacobsee

+0

Bạn có thể dễ dàng kết hợp điều này với 'for/r' để đi bộ một cây thư mục một cách đệ quy. – Joey

0

perl -CSD -ne 'in nếu m {\ text Qyour đây \ E}' file.txt

3

chắc chắn đi với Cygwin (sử dụng máy chủ x) - hỗ trợ mới nhất utf8. Tại buổi biểu diễn cuối cùng của tôi, tôi đã làm rất nhiều công việc với các nhân vật CJK. Sử dụng máy chủ x của Cygwin, bạn có thể tìm kiếm trên bất kỳ ký tự nào và hiển thị bất kỳ ký tự nào mà bạn có phông chữ cố định chiều rộng cho. Ngoài ra kiểm tra od và xxd mà làm cho nó dễ dàng để nhập tìm kiếm của bạn bằng cách sử dụng các ký tự hex ví dụ: $ echo '?' | grep $ (echo '3F' | xxd -p -r)

+2

Tôi là một người đề xuất lớn của Cygwin, và tôi nghĩ rằng GREP của nó có thể sẽ hoạt động tốt với đầu vào UTF-8. Nhưng tôi có thể nói với bạn rằng ngay cả những phiên bản mới nhất của Cygwin GREP cũng không thể xử lý hiệu quả với UCS-16. Tôi không đổ lỗi cho Cygwin nhiều như tôi đổ lỗi cho "chúng ta hãy mã hóa tất cả các nhân vật như đơn vị 16-bit" tâm lý đã cho chúng ta UCS-16. Gee, một nếp nhăn kiến ​​trúc mới không đủ cho những gì nó đang cố gắng thực hiện * cũng như * không tương thích với bất kỳ mã hiện có nào! Cảm ơn, 1991! – user1172763

1

tôi đã không sử dụng cửa sổ trong nhiều năm, nhưng tôi biết hai lựa chọn thay thế để grep được viết bằng ngôn ngữ giải thích và do đó nên chạy trên bất kỳ nền tảng:

Cả hai đều là công cụ dòng lệnh, nhưng tôi giả sử bạn đã có một giải pháp cho điều này nếu bạn đã sử dụng grep cho các cửa sổ.

Hãy xem chúng, tôi xin lỗi tôi không thể giúp một grepper đồng nghiệp tốt hơn điều này.

3

Nếu bạn có notepad ++, bạn có thể sử dụng tùy chọn "Tìm trong tệp ..." để tìm kiếm các tệp unicode.

+0

Rất hữu ích - Tôi * luôn * có Notepad ++ ... –

1

Bạn có thể sử dụng dnGREP. Đó là một công cụ grep nguồn mở khác hỗ trợ loại tệp unicode.

+0

fyi, yêu cầu .NET 4.0 – jacobsee

0

Tôi tin rằng chương trình miễn phí đáng chú ý nhất mà bạn cần trong Windows là Powershell. Ví dụ:

Get-ChildItem -recurse -path c: \ temp \ * c | Chọn-String -pattern "myunicodestring"

Hoặc nếu bạn chỉ chỉ muốn tìm kiếm trong một thư mục (không phải trong thư mục con.):

Chọn-String -path "c: \ mydir \ *. Đăng nhập" -pattern "lỗi"

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