Команда Sed: как заменить, если существует else, просто вставить? - программирование
Подтвердить что ты не робот

Команда Sed: как заменить, если существует else, просто вставить?

Мне нужно отредактировать несколько строк в файле, чтобы если строка начинается с (av или avpgw), то замените их новым текстом, иначе просто вставьте новый текст в начало.

Как я могу сделать это с помощью sed?

4b9b3361

Ответ 1

Вы можете сделать это следующим образом:

sed -e 's/^avpgw/new text/' -e t -e 's/^av/new text/' -e t -e 's/^/new text/' file

Это заменяет шаблон new text (s///) и переходит к концу (t). В противном случае он пробует следующий шаблон. См. Также сводные команды sed.

Вы также можете отделить команды с помощью ;:

sed 's/^avpgw/new text/; t; s/^av/new text/; t; s/^/new text/' file

или поместите команды в файл команды sed:

s/^avpgw/new text/
t
s/^av/new text/
t
s/^/new text/

и назовите его следующим образом:

sed -f commandfile file

Если вы хотите проигнорировать регистр, добавьте я в конце подстановочной команды, как в s/^av/new text/i. Другой способ - записать его с наборами символов s/^[aA][vV]/new text/. Но это не соответствует sed, для этого вы можете искать регулярные выражения в целом.

Ответ 2

Это может сработать для вас (GNU sed):

sed -r 's/^av(pgw)?.*/replacement/;t;s/^/replacement /' file