Vim: thay thế tất cả các dòng bắt đầu bằng chuỗi bằng dòng


9

Trên văn bản này

hardware mac 33:33:333:33:33
hardware mac 33:13:333:33:33
hardware mac 33:23:333:23:34
hardware mac 33:033:133:33:35
...

Tôi muốn thay thế tất cả các dòng bắt đầu với mac phần cứng bằng

hardware mac 00:00:00:00:00:00

Tôi đã thử

sed s/^hardware mac/hardware mac 00:00:00:00:00:00/gc

và đưa ra lỗi

cũng là lệnh vim cổ điển

%s:/^hardware mac/hardware mac 00:00:00:00:00:00/gc

Nhưng chỉ thay đổi mac phần cứng chuỗi để lại các số chưa được xử lý. Làm thế nào để thay thế chuỗi bắt đầu bằng mac phần cứng bằng chuỗi của tôi?

Câu trả lời:


14

Bạn gần như đã hiểu đúng, bạn chỉ quên khớp với phần còn lại của dòng (trên vim):

:%s/^hardware mac.*/hardware mac 00:00:00:00:00:00/gc

Bạn có thể bỏ các gctùy chọn ở cuối nếu bạn chắc chắn về những gì bạn đang làm, gcó thể là không cần thiết vì bạn sẽ không khớp nhiều hơn một lần trên mỗi dòng.

Với sednó là điều tương tự:

sed -i 's/^hardware mac.*/hardware mac 00:00:00:00:00:00/' filename

Lưu ý rằng sedlệnh thay thế skhông chấp cnhận cờ (xác nhận), giống như vim.


+1 FWIW, phần gtrong /gclà dự phòng, vì regex này chỉ có thể khớp với một trên mỗi dòng.
Sparhawk

Tôi đã chỉnh sửa câu trả lời của mình trong khi bạn viết nhận xét này (=
Kira

Lưu ý rằng sedcú pháp đó là kiểu GNU. Không phải tất cả các phiên bản đều hỗ trợ -ivà một số yêu cầu đối số với nó.
Eric Renouf
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.