2012-02-09 37 views
16

Tôi cố gắng để sử dụng lệnh này:SED tìm và thay thế bằng dấu ngoặc nhọn

sed -i 's#\{test1\}#test2#' /example/myfile.txt 

Để thay thế các trường hợp {test1} với test2.

tôi nhận được lỗi:

sed: -e expression #1, char 17: Invalid preceding regular expression 

Am tôi không thoát khỏi dấu ngoặc nhọn một cách chính xác?

+1

Hmm .. Tôi đã xóa các dấu gạch chéo ngược và có vẻ như hoạt động tốt. – atdev

Trả lời

22
sed -i 's#{test1}#test2#' /example/myfile.txt 

Bạn không cần phải thoát khỏi {}

21

Bạn chưa thoát khỏi dấu ngoặc nhọn ở tất cả. Trong sed, các cụm từ thông dụng mặc định là BRE, trong đó \{\} biểu thị một phạm vi biểu thức. Vì test1 không phải là phạm vi, BRE của bạn không chính xác.

Để khắc phục sự cố, bạn có thể thả dấu chéo ngược (dấu ngoặc không phải là đặc biệt trong BRE) hoặc giữ nguyên nó và yêu cầu sed sử dụng ERE (-r cờ với GNU sed, -E cờ với BSD/MacOSX sed).

+0

TIL BRE ERE. BRE khá tiện dụng trong thế giới 'sed'. – ericsoco

Các vấn đề liên quan