Tôi phải thay thế một khối lớn văn bản (mã script shell) trong một tệp bằng một khối văn bản khác.
Tôi ấn tượng với Làm thế nào tôi có thể sử dụng sed để thay thế một chuỗi nhiều dòng? trả lời bởi antak và thay thế nhiều dòng được trả lời bởi Bruce Ediger
Nhưng tôi có một số rắc rối trong việc sử dụng chúng.
antak đã đề cập trong câu trả lời của mình rằng việc truyền toàn bộ tệp (
1h;2,$H;$!d;g;
) vào bộ đệm là không nên đối với các tệp lớn, vì nó quá tải bộ nhớ.Tôi biết
sed
có thể được sử dụng với tính năng khối để giữ văn bản bên ngoài khối không thay đổi. Tôi muốn sử dụng tính năng này. Nhưng nếu tôi sử dụng,sed -i '/marker1/,/marker2/s/.*/new text (code)/' filename
nó sẽ chèn văn bản mới (mã) nhiều lần cho mỗi luồng. Do đó, tôi phải tạo khối trực quan thành một luồng, sử dụng thứ gì đó tương tự như được đề xuất bởi antak trước đó, nhưng cho khối (không phải cho toàn bộ tệp).
Như đã đề cập bởi Bruce Ediger tính năng phụ thêm của
ex
mà bắt đầu vớia
cấp với.
(dot) có thể được cố gắng, nhưng văn bản mới của tôi (code) chứa dòng bắt đầu với dấu chấm, có thể được coi là dấu chấm cú pháp append. Làm thế nào tôi có thể sử dụng nó trong tình huống này?ex
'dd
Số dòng' có thể xóa nhiều dòng, nhưng nếu tôi có một khối nằm giữa / Marker1 / và / Marker2 / với số dòng không cố định (thay đổi) sẽ được thay thế bằng văn bản mới (mã), cách thực hiện nó không
sed
hoặc ex
lệnh hoạt động).
r
lệnh đọc tệp, để sao chép văn bản từ một tệp khác, nếu nguồn cho văn bản thay thế nằm trong một tệp.