Mục đích thực sự của tùy chọn -X của GNU grep là gì và tại sao nó không có giấy tờ?


58

Bằng cách đọc câu hỏi này , tôi đã phát hiện ra rằng GNU grepcó một -Xtùy chọn mong đợi một đối số. Kỳ lạ thay, nó được đề cập không phải trong trang người đàn ông cũng như trong trang thông tin.

Nhìn vào mã nguồn, có nhận xét đó ở giữa --helpđầu ra :

/* -X is deliberately undocumented.  */

Nhìn xa hơn, dường như các -X matchertùy chọn thiết lập cơ sử dụng cho regexp , matchermột trong những grep , egrep, fgrep, awk, gawk, posixawkperl(như các phiên bản 2.25).

Một số trong những giá trị này là đúng giống với tùy chọn hiện có (cụ thể là grep -G, grep -E, grep -Fgrep -P). Mặt khác, ba awkbiến thể không có tùy chọn tương ứng.

Có ai biết mục đích thực sự của tùy chọn này là gì, đặc biệt là với một trong những awkcông cụ regrec không? Ai đó có thể cho tôi biết lý do tại sao nó không cố ý không?


6
Khám phá thú vị! Tôi nghi ngờ mục đích của việc để nó không có giấy tờ là để họ có thể thoải mái xóa nó khỏi các phiên bản trong tương lai theo ý muốn và không cần thông báo trước. Một ví dụ khác về tùy chọn không có giấy tờ GNU là -Edành cho GNU sed cung cấp khả năng tương thích với BSD sed. (Tôi hy vọng -Esẽ trở thành tài liệu nếu POSIX chính thức chấp nhận và xóa nếu không.)
John1024

3
Tôi đồng ý với @ John1024, mặc dù người duy nhất có thể trả lời dứt khoát là Stepan Kasal, người, vào ngày 7 tháng 2 năm 2005, đã ghi lại rằng -Xnó không có giấy tờ. (Địa chỉ email của anh ấy nằm trong danh sách thay đổi nếu bạn muốn hỏi anh ấy.)
Wildcard

3
Tôi đã cố gắng theo dõi điều này trong suốt lịch sử git, nhưng hóa ra nó đã được thêm vào trước khi cam kết git đầu tiên của grep (nó có mặt trong 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 từ Tue ngày 3 tháng 11 21:38:51 1998). Có lẽ họ đã nhập các VCS trước đó vào git, vì rõ ràng là trước git.
derobert

1
Ngoài ra trong grep 2.0, bản cũ nhất được tìm thấy tại ftp.gnu.org/gnu/grep/?C=M;O=A
derobert

3
... nhưng không phải trong 1.6 mà tôi tìm thấy tại oldlinux.org/Linux.old/distribution/TAMU/TAMU-1.0D/src/tar/iêu (lưu ý: Tôi đã không nỗ lực để xác minh tính xác thực của mã đó) vì vậy nó sẽ xuất hiện cho đến ngày nào đó giữa 1.6 (1992) và 2.0 (1993)
derobert

Câu trả lời:


67

Mục đích của nó là cung cấp quyền truy cập vào các công cụ đối sánh khác nhau được triển khai trong GNU grepở dạng này hay dạng khác, đặc biệt là các công cụ đối sánh AWK không có sẵn, có thể cho mục đích thử nghiệm (xem lỗi 16481 thảo luận về việc thêm gawkposixawkso khớp).

Tuy nhiên, hiện tại nó có lỗi, đó là lý do tại sao nó được ghi nhận là không có giấy tờ :

Vào Thu, ngày 27 tháng 1 năm 2005 lúc 04:06:04 PM -0500, Charles Levert đã viết:
> Tùy chọn '-X', và đặc biệt là việc sử dụng nó với "so khớp" awk
> ("-X awk") không được ghi nhận.

xin vui lòng để lại nó không có giấy tờ.

Nó không cung cấp bất kỳ chức năng mới nào ngoài -X awk.

Và việc thực hiện các regexps awk là không hoàn hảo, tôi nghĩ vậy.

GNU regex mới liên kết một số phương tiện để đặt cú pháp kiểu AWK, vâng. Tuy nhiên, gawk không sử dụng nó trực tiếp: nó phân tích cú pháp regex trước.

Cụ thể, regexps awk cho phép các chuỗi thoát \ NNN, trong đó NNN là một giá trị bát phân. Vì vậy, / \ 040 / không gian toán học. grep -X awk dường như không hỗ trợ điều này.

Tôi sợ rằng regex.c không hỗ trợ các chuỗi thoát này.

Chúng tôi sẽ phải đảm bảo rằng các biểu thức chính tương thích hoàn toàn với biểu thức chính thức trước khi chúng tôi quyết định ghi lại (và do đó hỗ trợ) tính năng này.

Tôi nghĩ nó không đáng để gặp rắc rối.

Stepan

Một người theo dõi yêu cầu bình luận được thêm vào, và cung cấp thêm một chút nền tảng về -Xtùy chọn:

Xu hướng của riêng tôi là đề nghị chỉ loại bỏ hoàn toàn -X. Tôi nghi ngờ nó đã được thêm bởi tác giả ban đầu chủ yếu cho mục đích thử nghiệm. Nếu nó sẽ ở lại, ít nhất là thêm một bình luận như thế này.

/* -X is undocumented on purpose. */

để tránh thảo luận trong tương lai về một vấn đề được giải quyết.

Arnold

Stepan đã làm ngay sau đó .


3
Công trình khảo cổ tốt đẹp, cảm ơn bạn Stephen.
xhienne

2
Cảm ơn :-). Đường mòn dừng lại ở grep 2.0 không may; Tôi có ấn tượng rằng đó là phiên bản được giới thiệu -X, có thể là hiệu ứng phụ của việc viết lại DFA, nhưng thay đổi là ngắn về chi tiết.
Stephen Kitt

7
"để tránh thảo luận trong tương lai về một vấn đề được giải quyết." Làm thế nào mà làm việc ra? ;)
Brock Adams

1
Sẽ không "-X không có giấy tờ vì đó là lỗi" có phải là lựa chọn tốt hơn không?
JAB
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.