Зробіть кілька редагувань одним закликом до sed


16

Я намагаюся використовувати sed для редагування файлу конфігурації. Є кілька рядків, які я хотів би змінити. Я знаю, що в Linux sed -iпередбачено редагування на місці, але для цього потрібно зберегти файл резервного копіювання. Однак я хотів би не мати декількох файлів резервного копіювання і вносити всі мої зміни на місці.

Чи є спосіб зробити це sed -iчи є краща альтернатива?

Відповіді:


22

Ви можете сказати sedвиконувати кілька операцій, просто повторивши -e(або -fякщо ваш скрипт у файлі).

sed -i -e 's/a/b/g' -e 's/b/d/g' fileвносить обидві зміни в одному файлі, названому file, in-place. Без файла резервного копіювання.

sed -ibak -e 's/a/b/g' -e 's/b/d/g' fileвносить обидві зміни в одному файлі, названому file, in-place. З одним файлом резервного копіювання з назвою filebak.


2
Зауважте, що послідовність має значення. У наведеному прикладі команди , наведеної вище, всі екземпляри листи aперетворюються в b, а потім всі екземпляри bперетворюються в d. Ви можете зробити те ж саме, що - sed -i -e 's/a\|b/d/g' fileввімкнути всі екземпляри або в, aабо bв d.
Wildcard

4

Іншою альтернативою є exпопередник до vi. Це насправді інструмент POSIX вибору для на місці сценарію редагування файлу; він надзвичайно гнучкіший ніж і, можливо, навіть більш портативний, ніж Perl. (Якщо ви залишаєтесь поза світом Windows, це неперевершено портативніше ніж Perl.)sed -i

Існує відносна недостатність на цій стек-зміні прикладних команд, що використовують ex, принаймні, порівняно з безліччю команд-прикладів, що використовують команди sed, awkта Perl. Однак я сам сильно заглибився в специфікації POSIXex і з тих пір бив у барабан. Я написав багато відповідей, використовуючи exі тут, і на vi / Vim stackexchange:

Подальше читання:


3

Окрім використання декількох -eопцій, ви також можете відокремлювати команди sed в одному сценарії sed, використовуючи нові рядки або напівколонки.

Це той випадок, незалежно від того, що цей скрипт є однолінійним в командному рядку чи файлом сценарію.

напр

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

Пробіли навколо символів ;необов’язкові. Я використовував їх тут, щоб переконатися, що напів-двокрапка виділяється (загалом, крім нових рядків, що розділяють команди, пробіл між командами ігнорується ... але не забувайте, що пробіл у командах може бути і зазвичай є вагомий).

або:

sed -e 's/a/b/g
        s/b/d/g' file
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.