Máy tính của tôi đang chạy macOS 10.12.3 và tôi đang sử dụng grep
tiệ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ư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:
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
Bạn sẽ thấy đó
—
Stéphane Chazelas
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, grep
tì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 anana
tụ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$'
@JdeBP, trên OS X của tôi,
—
ilkkachu
grep
tự nhận dạng như grep (BSD grep) 2.5.1-FreeBSD
vớ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.
Chúng tôi đang chứng minh làm thế nào điều này là sai lệch. (-: Điều
—
JdeBP 22/03/17
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 bsdgrep
là những gì OpenBSD gọi grep
và là BSD grep
, không có --color
tù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 grep
sang.