Я пытаюсь использовать sed для редактирования файла конфигурации. Есть несколько строк, которые я хотел бы изменить. Я знаю, что в Linux sed -i
допускается редактирование на месте, но это требует сохранения в файл резервной копии. Однако я бы хотел избежать нескольких файлов резервных копий и вносить все свои изменения сразу.
Есть ли способ сделать это с помощью sed -i
или есть лучшая альтернатива?
a
превращаются вb
, а затем все экземплярыb
вd
. Вы можете сделать то же самое с -sed -i -e 's/a\|b/d/g' file
повернуть все экземплярыa
илиb
вd
.Другой альтернативой является
ex
предшественникvi
. Это на самом деле инструмент POSIX выбора для на месте сценария редактирования файла; он чрезвычайно гибок и, возможно, даже более переносим, чем Perl. (Если вы остаетесь за пределами мира Windows, он, несомненно, более переносим, чем Perl.)sed -i
Относительный недостаток в этом стеке примеров команд, использующих
ex
, по крайней мере по сравнению с множеством примеров команд, использующихsed
,awk
и Perl. Тем не менее, я сам вникал в спецификацию POSIXex
и с тех пор бью по барабану. Я написал много ответов, используяex
здесь и на стек-обмене vi / Vim:Дальнейшее чтение:
источник
Помимо нескольких
-e
опций, вы также можете разделить команды sed в одном сценарии sed, используя символы новой строки или точки с запятой.Это тот случай, является ли этот скрипт однострочным в командной строке или файлом сценария.
например
Символы пробела вокруг
;
являются необязательными. Я использовал их здесь, чтобы убедиться, что точка с запятой выделяется (в общем, за исключением символов новой строки, разделяющих команды, пробел между командами игнорируется ... но не забывайте, что пробел внутри команд может быть и обычно существенный).или:
источник