Câu hỏi Làm thế nào để thay thế một dòng tập tin xml bằng cách sử dụng sed


Tôi có văn bản sau trong File.XML:

<http-listener name="default" socket-binding="http" max-post-size="1073741824" />

Tôi muốn thay thế bằng

<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>

Tôi đã thử

sed -i 's/<http-listener name="default" socket-binding="http" max-post-size="1073741824" /><!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>' test.xml

Nhưng có lỗi


2
2017-08-01 14:57


gốc




Các câu trả lời:


Chèn đoạn cần thiết (<!--) lúc bắt đầu (^):

sed 's/^/<!-- /'

Thí dụ:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^/<!-- /' <<<"$var"
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" />

Chỉ cần lưu ý, để phân tích cú pháp dữ liệu có cấu trúc như xml, bạn nên sử dụng công cụ hiểu cấu trúc, ví dụ: xmlstarlet.


Trả lời câu hỏi đã chỉnh sửa:

Bạn có thể kết hợp chuỗi con chính xác ở đầu và cuối, khi sử dụng thay thế \0 để tham khảo toàn bộ trận đấu đưa các chất nền thay thế mong muốn xung quanh:

sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/'

Thí dụ:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/' <<<"$var"                     
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>

2
2017-08-01 16:02



Không cần regex mở rộng, bạn có thể lưu -E. Trong lệnh OP đã thử có thêm `- >>` ở cuối dòng, vì vậy có thể OP muốn sed 's_<http… />_<!-- & -->>_ - có dấu phân cách khác nhau vì dòng gốc chứa dấu gạch chéo. - dessert
sed -i 's_ <http-listener name = "mặc định" socket-binding = "http" max-post-size = "1073741824" /> _ <! - & -> _' test.xml @dessert. Nó hoạt động tốt. Thông tin đẹp - Picasu27
@ biểu tượng cảm xúc tốt đẹp trong đó :) - Sergiy Kolodyazhnyy
@trung -E đã trở thành một loại bộ nhớ cơ bắp ... hahaha .... - heemayl