2012-07-03 23 views

Trả lời

13

Bạn không cần phải thoát khỏi bất cứ điều gì trong đầu vào:

$ echo "123 ' foo & b'ar" | sed "s/'/''/g" 
123 '' foo & b''ar 

Tuy nhiên, trong 'thay thế' một phần của s lệnh & có một ý nghĩa đặc biệt: nó có nghĩa là 'phù hợp'. Đó là lý do lệnh trên có thể được viết lại như sau:

$ echo "123 ' foo & b'ar" | sed "s/'/&&/g" 
123 '' foo & b''ar 

thoát nó với một \ như mọi thứ khác mà cần phải được thoát, nếu cần thiết:

$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g" 
123 '&' foo & b'&'ar 
5

Nó dễ dàng hơn để trả lời nếu bạn gửi mã của bạn, nhưng tôi đoán bạn không thoát khỏi dấu và. Thay đổi & thành \& nếu bạn muốn có ký hiệu chữ cái.

Xem phần 3.1.2 của The sed FAQ để biết thêm chi tiết, nếu bạn tò mò.

+1

Này, tôi muốn thay thế một chuỗi với '&' trong chuỗi đầu ra của tôi. Tôi đã thử '" & "', '\ &', '\\ &', '\\\ &', '" '\ &' "' dựa trên các câu trả lời khác nhau trên web nhưng không có công trình, bất kỳ đề xuất nào? – Ava

+1

'\ &' hoạt động cho tôi. Ví dụ, tôi có thể thay thế tất cả các trường hợp 'amp' bằng' & 'bằng cách sử dụng' sed "s/amp/\ &/g" '. Nếu bạn vẫn gặp sự cố, bạn nên đăng câu hỏi mới bằng chuỗi nhập và mã của bạn. –

+1

Phải. Tôi đã sử dụng một tệp khác không có thay đổi :( – Ava

0

Đó là làm việc cho tôi

bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g" 
''This is a string with ''single quote'' & ''&'' 
Các vấn đề liên quan