Có nhiều biến thể về cú pháp biểu thức chính quy . Các công cụ đầu tiên trong thế giới unix có biểu thức chính quy không có đầy đủ khả năng của biểu thức chính quy, chỉ có các bộ ký tự ( […]
và .
), lặp lại ( *
) và neo dòng ( ^
và $
). Biểu thức chính quy cơ bản chỉ có các toán tử này. Sed là một công cụ trường học cũ và sử dụng các biểu thức cơ bản.
Nhiều triển khai sed có phần mở rộng cho kết hợp regrec đầy đủ. Bởi vì ký tự |
là viết tắt của chính nó, bạn cần sử dụng \|
để xen kẽ, và tương tự \(
và \)
để nhóm. Lưu ý rằng tiêu chuẩn POSIX không bắt buộc \|
được hỗ trợ trong các biểu thức chính quy cơ bản và một số hệ thống (ví dụ OpenBSD ) không có tiêu chuẩn này.
Một số phiên bản của sed có tùy chọn để chuyển sang các biểu thức chính quy mở rộng , trong đó (…)
được sử dụng để nhóm và |
thay thế. Với GNU sed (tức là theo Linux hoặc Cygwin) hoặc Busybox , hãy vượt qua -r
tùy chọn này. Trên FreeBSD hoặc OSX , vượt qua -E
tùy chọn.
Nếu sed của bạn không có sự thay thế, bạn có thể gọi awk
thay thế. Nó được ủy quyền bởi POSIX , nhưng hơi dài dòng cho nhiệm vụ này và nó không hỗ trợ các phản hồi.
awk '{gsub(/foo|bar/, "narf")}' <fileName.old >fileName.new
Nhân tiện, chỉ có GNU và Busybox sed hỗ trợ thay thế tập tin. Awk và các phiên bản khác của sed không. Xem Tôi có thể thực hiện `cut` thay đổi một tập tin tại chỗ không?
Nếu bạn có Perl, nó thường tiện dụng theo kiểu một công cụ duy nhất để xử lý văn bản một lớp. Hầu hết những gì dễ dàng trong sed, awk và phần còn lại không khó hơn nhiều ở Perl, và bạn có thể thoát khỏi việc học một công cụ (nếu phức tạp).
perl -i -pe 's/foo|bar/narf/g' fileName