Thực hiện nhiều chỉnh sửa với một cuộc gọi đến sed


14

Tôi đang cố gắng sử dụng sed để chỉnh sửa tập tin cấu hình. Có một vài dòng tôi muốn thay đổi. Tôi biết rằng trong Linux sed -icho phép chỉnh sửa tại chỗ nhưng nó yêu cầu bạn lưu vào tệp sao lưu. Tuy nhiên, tôi muốn tránh việc có nhiều tệp sao lưu và thực hiện tất cả các thay đổi tại chỗ cùng một lúc.

Có cách nào để làm như vậy với sed -ihoặc có một sự thay thế tốt hơn?

Câu trả lời:


20

Bạn có thể yêu sedcầu thực hiện nhiều thao tác bằng cách chỉ lặp lại -e(hoặc -fnếu tập lệnh của bạn nằm trong một tệp).

sed -i -e 's/a/b/g' -e 's/b/d/g' filethực hiện cả hai thay đổi trong tệp duy nhất có tên file, tại chỗ. Nếu không có một tập tin sao lưu.

sed -ibak -e 's/a/b/g' -e 's/b/d/g' filethực hiện cả hai thay đổi trong tệp duy nhất có tên file, tại chỗ. Với một tập tin sao lưu duy nhất có tên filebak.


2
Lưu ý rằng trình tự quan trọng. Trong lệnh ví dụ được đưa ra ở trên, tất cả các phiên bản của chữ cái ađược chuyển thành bsau đó tất cả các phiên bản của bđược chuyển thành d. Bạn có thể làm điều tương tự với sed -i -e 's/a\|b/d/g' filetất cả các trường hợp hoặc ahoặc bvào d.
tự đại diện

4

Một thay thế khác là ex, tiền thân để vi. Nó thực sự công cụ POSIX được lựa chọn để chỉnh sửa tập tin theo kịch bản tại chỗ; nó cực kỳ linh hoạt hơn sed -ivà thậm chí còn dễ mang theo hơn cả Perl. (Nếu bạn ở bên ngoài của thế giới Windows, nó unarguably hơn xách tay hơn Perl.)

Có một sự khan hiếm tương đối về stackexchange này các lệnh ví dụ sử dụng ex, ít nhất là so với rất nhiều lệnh ví dụ sử dụng sed, awkvà Perl. Tuy nhiên, bản thân tôi đã đào sâu vào các thông số kỹ thuật POSIXex và tôi đã đánh trống cho nó kể từ đó. Tôi đã viết nhiều câu trả lời bằng excả ở đây và trên stackexchange vi / Vim:

Đọc thêm:


3

Cũng như sử dụng nhiều -etùy chọn, bạn cũng có thể tách các lệnh sed trong một tập lệnh sed bằng cách sử dụng dòng mới hoặc dấu chấm phẩy.

Đây là trường hợp cho dù tập lệnh đó là một lớp lót trên dòng lệnh hay tập tin tập lệnh.

ví dụ

sed -e 's/a/b/g ; s/b/d/g' file

Các nhân vật không gian xung quanh ;là tùy chọn. Tôi đã sử dụng chúng ở đây để đảm bảo dấu chấm phẩy nổi bật (nói chung, ngoại trừ các dòng mới phân tách các lệnh, khoảng trắng giữa các lệnh bị bỏ qua ... nhưng đừng quên rằng khoảng trắng trong các lệnh có thể và thường là có ý nghĩa).

hoặc là:

sed -e 's/a/b/g
        s/b/d/g' file
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.