2012-09-04 12 views
6

Dường như phiên bản cổ phiếu của grep (thông tin phiên bản: grep (BSD grep) 2.5.1-FreeBSD) trong mac os 10.8 có vấn đề với các mẫu chia sẻ một tiền tố chung khi được chạy trong chế độ regex dòng (-x). Trong ví dụ tối thiểu sau tôi mong đợi rằng grep báo cáo "test" và "test2" nhưng thay vào đó chỉ "test" được báo cáo. (Tương tự cũng đúng với chế độ regexp từ (-w)).grep (BSD grep) 2.5.1-FreeBSD trên chế độ mac OS 10.8 dòng regexp không hoạt động với các mẫu chồng chéo

printf "test\ntest2\n" > f1.txt 
printf "test\ntest2\n" > f2.txt 
grep -x -F -f f1.txt f2.txt 

Có ai khác đã thực hiện quan sát tương tự hoặc thậm chí biết về cách giải quyết không?

+0

có vẻ như một lỗi, không thể tự kiểm tra. Như một workaround có bạn đã cố gắng thay đổi vị trí của kiểm tra và test2 trong f1.txt? – akostadinov

Trả lời

4

Đã xác minh; điều này trông giống như một lỗi trong Apple và/hoặc FreeBSD grep. Công ty của tôi cài đặt GNU grep trên tất cả các hệ thống Mac của chúng tôi thay vì đưa ra hành vi lập dị của FreeBSD.Và có, GNU grep tìm cả hai dòng trong ví dụ của bạn.)

Nếu tính di động giữa Mac và Linux là một mục tiêu, tôi khuyên các bạn nên từ bỏ grep hoàn toàn và chỉ sử dụng perl (hoặc cái gì đó như ack, mà phụ thuộc vào perl).

@ akostadinov đề xuất đặt các mẫu dài hơn trước khi những cái ngắn hơn trong f2.txt dường như hoạt động xung quanh lỗi, nhưng tôi sẽ là tinh ranh của dựa về điều gì đó tương tự. Nó hoạt động trên ví dụ đồ chơi này, nhưng nó hoạt động nói chung, và nó sẽ tốn kém như thế nào khi bạn tìm ra?