Thay thế nhiều dòng trong sed hoặc awk [đã đóng]


9

Tôi đang cố gắng sử dụng sed hoặc awk để thay thế 5 dòng trong tệp smb nhưng tôi không biết làm thế nào để đối phó với các dòng mới.


6
Tất nhiên, sed và awk có thể làm điều này, nhưng tôi gặp một chút rắc rối khi hiểu chính xác câu hỏi của bạn là gì. Chính xác thì điều gì đang gây rắc rối cho bạn? Chèn dòng mới? Thay thế chúng?
frabjous

Câu trả lời:


19

Sed khá tệ về điều này, bởi vì nó vận hành một dòng tại một thời điểm. Kỹ thuật duy nhất tôi từng thấy để làm điều này là kỹ thuật này , liên quan đến việc lưu trữ toàn bộ tệp trong bộ đệm giữ của sed và sau đó vận hành tất cả cùng một lúc:

sed -n '1h;1!H;${g;s/search/replace/;p;}'

Nếu bạn có thể, việc sử dụng perl sẽ dễ dàng hơn nhiều để thực hiện điều này:

perl -0pe 's/search/replace/'

searchcó thể chứa \ns để đại diện cho dòng mới


1
+1 cho sedmultiliner.
Lazer

Bạn có thể giải thích những gì dòng lệnh lập luận để perl làm gì?
Michael

1
@Michael -0đặt dấu tách bản ghi thành null, vì vậy toàn bộ tệp sẽ được đọc cùng một lúc thay vì từng dòng một. -plàm cho nó in kết quả sau khi thay thế. -enó có lấy đối số tiếp theo làm biểu thức để chạy không, và s/search/replace/đó có phải là biểu thức đó không
Michael Mrozek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.