Tại sao kết quả grep BSD này khác với GNU grep?


13

Máy tính của tôi đang chạy macOS 10.12.3 và tôi đang sử dụng greptiện ích được cài đặt hệ thống với phiên bản 2.5.1-FreeBSD.

Đây là những kết quả tôi nhận được khi kiểm tra các biểu thức khác nhau:

Ảnh chụp màn hình

Nhưng nếu tôi chạy chúng bằng GNU grep (phiên bản 2.25), tôi sẽ nhận được những điều sau:

Ảnh chụp màn hình

Grep của GNU có vẻ đúng với tôi và BSD là không chính xác, phải không? Tại sao chúng khác nhau? Tôi không hiểu tại sao grep của BSD khớp với "a" khi biểu thức chính quy chỉ định rằng nó phải tuân theo phần đầu của dòng.


2
Hãy báo cáo hành vi đầu tiên là một lỗi.
Satō Katsura

1
Bạn sẽ thấy đó echo 'bababa' | grep -E '^(a|b)'là tất cả các màu đỏ. Và bạn sẽ có cùng một vấn đề với -o. Tôi đoán, greptìm kiếm nhiều trận đấu, nhưng đối với trận đấu thứ hai trở đi, nó áp dụng biểu thức chính quy cho những gì ở bên phải của lần khớp trước đó (cứ tiếp ananatục lần thứ hai trong trường hợp của bạn) mà không chuyển cờ REG_NOTBOL. Xem thêmecho banana | grep -Eo '^ban|^ana$'
Stéphane Chazelas

2
@JdeBP, trên OS X của tôi, greptự nhận dạng như grep (BSD grep) 2.5.1-FreeBSDvới trang man chỉ đề cập đến GNU bằng cách đề cập đến "các tùy chọn dài được cung cấp để tương thích với các phiên bản GNU". Ngoài ra, không có thông báo bản quyền hoặc đề cập đến GPL (hoặc FSF). Nếu nó có lịch sử với sử dụng GNU, thật khó để nói.
ilkkachu

Chúng tôi đang chứng minh làm thế nào điều này là sai lệch. (-: Điều grepđược thảo luận trong câu trả lời của Decade Moon mà rất nhiều người đang nghĩ là xác định chính xác là grep (GNU grep) 2.5.1-FreeBSD(như có thể thấy trong cuộc thảo luận về lỗi), có thông báo bản quyền của FSF và chắc chắn là GNU grep. Những gì FreeBSD gọi bsdgreplà những gì OpenBSD gọi grepvà là BSD grep, không có --colortùy chọn nào ngoài biến thể FreeBSD. Đó là những gì được xác định là grep (BSD grep) 2.5.1-FreeBSD, và trớ trêu thay là những gì một người trong cuộc thảo luận về lỗi đã đề nghị FreeBSD chuyển grepsang.
JdeBP 22/03/17

Câu trả lời:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.