Tại sao sed không sử dụng chế độ regex mở rộng theo mặc định?


10

Tôi đang sử dụng sed. Tôi đã sử dụng một biểu thức chính xác theo như tôi có thể thấy, nhưng sed không làm gì cả. Hóa ra tôi đang sử dụng \s+mà sed không thể hiểu và khi tôi chuyển sang [ ]+nó hoạt động.

Vì vậy, để tóm tắt, tôi đã tạo một regex để nó hoạt động, tôi phải thoát gần như mọi thứ và xóa \skhoảng trắng. Có vẻ như có một chế độ để tránh tất cả những điều này. -rVì vậy, tôi muốn hỏi:

  1. Tại sao không phải -rlà chế độ mặc định cho sed? Tại sao tôi phải đi quá nhiều rắc rối để thoát khỏi mọi thứ?
  2. mannói rằng có tùy chọn --posixvà "POSIX.2 BREs nên được hỗ trợ" Điều này đề cập đến điều gì? Chế độ NFA / DFA?

Bên cạnh đó, để phù hợp với khoảng trắng như \s+sử dụng perl [[:space:]][:space:]]*trong BRE và tương tự hoặc [[:space:]]+trong ERE.
JRM

Câu trả lời:


10

Re 1) Câu trả lời giống như với bất kỳ công cụ nào khác đã được cải thiện qua nhiều thập kỷ. :)

Bạn không muốn phá vỡ các tập lệnh hiện có bằng cách thay đổi hành vi mặc định.

Re 2) Điều đó không liên quan gì đến công cụ khớp; đó chỉ là một câu hỏi trong đó tập hợp các biểu thức chính quy được hỗ trợ. POSIX BRE có nghĩa là "biểu thức chính quy cơ bản".


Còn điểm (2) thì sao?
Jim

Chỉnh sửa có giúp được không?
tink

1

Về điểm 2: gnu sedsử dụng GNU BREtheo mặc định. Để sử dụng POSIX, BREbạn nên chỉ định--posix

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.