Vim: заменить всю строку, начинающуюся со строки, строкой

9

На этот текст

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
...

Я хочу заменить все строки, начиная с аппаратного Mac на

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

я пытался

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

и дать ошибку

также классическая команда VIM

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

Но измените только аппаратную строку mac, оставив цифры нетронутыми. Как заменить строку, начинающуюся с аппаратного Mac, моей строкой?

elbarna
источник

Ответы:

14

Вы почти правильно поняли, вы просто забыли сопоставить остальную часть строки (вкл vim):

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

Вы можете отказаться от gcопций в конце, если вы уверены в том, что делаете, gскорее всего, излишне, так как вы не будете совпадать более одного раза в строке.

С sedэтим тоже самое

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

Обратите внимание, что sedкоманда подстановки sне принимает c(подтверждает) флаг, как это vimделает.

Kira
источник
+1 FWIW gв /gcизбыточен, так как это регулярное выражение может соответствовать только одному в каждой строке в любом случае.
Sparhawk
Я редактировал мой ответ, пока вы писали этот комментарий (=
Кира,
Обратите внимание, что этот sedсинтаксис в стиле GNU. Не все версии поддерживают, -iа некоторые требуют аргументации.
Эрик Ренуф