Có một số vấn đề.
Đầu tiên, niềng răng {...}
trong biểu thức sed của bạn không khớp với bất kỳ thứ gì trong đầu vào. Trong một Biểu thức chính quy cơ bản sed, các dấu ngoặc nhọn là nghĩa đen, trong khi trong một Biểu thức chính quy mở rộng, chúng bao quanh một bộ định lượng có dạng {n,m}
. Chúng không bao giờ được sử dụng để nhóm.
Thứ hai, chuỗi màu của bạn không đúng định dạng - phần mở đầu cần được \033[0;34m
còn hơn là \033[0;34
Thứ ba, ký tự dấu gạch chéo ngược \
là đặc biệt trong sed - đặc biệt, dấu gạch chéo ngược theo sau là chữ số thập phân trên RHS của thay thế là tham chiếu ngược đối với nhóm chụp; ít nhất là trong GNU sed, \0
đề cập đến toàn bộ LHS bị bắt tương đương với mã thông báo thay thế đặc biệt &
ví dụ
$ tiếng vang | sed 's/foo/\033bar/'
foo33bar
Để vượt qua một nghĩa đen \
đến bên ngoài tiếng vang -e
bạn sẽ cần \\
bên trong chuỗi thay thế sed.
Cuối cùng, \
Là Mà còn đặc biệt đối với trình bao, do đó, bên trong dấu ngoặc kép "mềm" cần có dấu gạch chéo ngược bổ sung. Vì vậy:
echo -e "$(echo "Đây là văn bản không màu" |
sed "s/Đây là văn bản không màu/Đây là \033[0;34văn bản không màu\033[0m/")"
hoặc (thay thế dấu ngoặc kép bên trong bằng dấu ngoặc đơn 'mạnh'):
echo -e "$(echo "Đây là văn bản không màu" |
sed 's/Đây là văn bản không màu/Đây là \033[0;34văn bản không màu\033[0m/')"
Lưu ý rằng bạn không cần g
công cụ sửa đổi để thực hiện một thay thế duy nhất trên mỗi dòng.
Xem thêm Tôi cần thoát những ký tự nào khi sử dụng sed trong tập lệnh sh?