Có phiên bản tiêu chuẩn nào của `sed` mà` -E` không được hỗ trợ không?


7

Trên BSD sed, -Elà cờ "regex mở rộng". Trên GNU sed, tài liệu nói rằng -rcờ regex mở rộng, nhưng công -Etắc cũng hoạt động (mặc dù không có giấy tờ trong nghiên cứu của tôi).

Tôi nhớ lại việc đọc ở đâu đó -Esẽ được chỉ định trong phiên bản tiếp theo của thông số kỹ thuật POSIX, nhưng tôi không thể tìm thấy nơi tôi đọc nó.

(Điều đó có đúng không? Có một tài liệu tham khảo chính thức cho điều đó hay người dùng ở đây người có thẩm quyền?)

Chỉ cách cầm tay sự -Echuyển đổi cho sed?

Có những tiêu chuẩn (tức là POSIX compliant) phiên bản sedtrên mà -Ekhông được hỗ trợ? (Cái nào?)

Tại sao -Ecờ không được ghi lại cho GNU sed?


1
Tôi không thể giải thích lý do tại sao họ làm điều đó, nhưng nguồn cho GNU sed bao gồm nhận xét về việc xử lý -E: /* Undocumented, for compatibility with BSD sed. */và xử lý chính xác như-r
Eric Renouf

@EricRenouf, Đẹp tìm thấy; bạn có thể cung cấp một liên kết cũng? :)
tự đại diện

1
Khi điều đó xảy ra, tôi đã may mắn với phiên bản nguồn mà tôi đang xem, nhưng bây giờ tôi sẽ làm cho bạn một thứ tốt hơn. Đây là cam kết nơi nhận xét mà tôi đã trích dẫn đã bị xóa và nó bao gồm thông báo nhật ký "Sửa đổi tài liệu cần lưu ý tùy chọn sed" -E ", hiện ở POSIX, cho ERE.", Được thực hiện vào 2013-10-16, vì vậy Tôi ngạc nhiên khi nó không được đưa vào tài liệu hoặc tương tự, mặc dù hộp Cent OS 7 của tôi vẫn có phiên bản từ năm 2012
Eric Renouf

1
Điều đó nói rằng, tôi không thể tìm thấy tài liệu tham khảo về nó trong tài liệu POSIX mới nhất (tôi nghĩ) cho sed
Eric Renouf

@EricRenouf, Cam kết đó (và trang được liên kết từ nó ) trả lời gần như mọi phần câu hỏi của tôi. Bạn có thể vui lòng cho nhận xét của bạn một câu trả lời? :)
tự đại diện

Câu trả lời:


8

GNU trước tiên đã thêm hỗ trợ không có giấy tờ để -Echỉ tương thích với cú pháp BSD và nguồn bao gồm nhận xét

/ * Không có giấy tờ, để tương thích với BSD sed. * /

Nhưng vào năm 2013, nó đã bị xóa trong cam kết này với thông điệp tường trình

Sửa đổi tài liệu để lưu ý tùy chọn sed "-E", hiện có trong POSIX, cho ERE.

và cam kết tham chiếu trình theo dõi lỗi cho POSIX tại trang này đánh dấu là đã chấp nhận thêm -Ecờ vào các sedđối số

Dường như nó không biến nó thành thông số POSIX mới nhất ( phần cụ thể của sed ), nhưng tôi đoán nó sẽ đến.


Tất nhiên nó cũng bị thiếu từ các distro cũ. Tôi vừa mới phát hiện ra rằng Sed trong RHEL 5 không hỗ trợ -E, mặc dù nó không hỗ trợ -r. (Điều này có vẻ rõ ràng đối với các môi trường bao gồm các hệ thống cũ, nhưng tôi đã quên kiểm tra.)
Wildcard

@Wildcard Tôi đoán điều đó có ý nghĩa. Vì họ đã thêm -Etính tương thích với các cờ khác, nên đã có lúc có trước sự bổ sung đó
Eric Renouf

6

Nơi để xem xét là các hệ thống được chứng nhận:

OSX có nó, mặc dù đó là BSD- hay GNU-First không phải là một phần của câu hỏi.


2
Đưa ra nhận xét mà tôi tìm thấy trong nguồn GNU, tôi nghĩ rằng an toàn khi giả định BSD đã làm điều đó trước tiên
Eric Renouf

1
Có vẻ kỳ lạ rằng đây không phải là câu trả lời được chấp nhận ...
don_crissti
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.