Подтвердить что ты не робот

Sed - комментарий строки, соответствующей определенной строке И, которая еще не закомментирована

У меня есть следующий тестовый файл

AAA
BBB
CCC

Используя следующий sed, я могу прокомментировать строку BBB.

# sed -e '/BBB/s/^/#/g' -i file

Я бы хотел только прокомментировать строку, если она еще не имеет # в начале.

# sed -e '/^#/! /BBB/s/^/#/g' file

sed: -e expression #1, char 7: unknown command: `/'

Любые идеи, как я могу это достичь?

4b9b3361

Ответ 1

Предполагая, что у вас нет строк с несколькими #, это будет работать:

sed -e '/BBB/ s/^#*/#/' -i file

Примечание: вам не нужно /g, поскольку вы выполняете не более одной подстановки на строку.

Ответ 2

Я считаю, что это решение работает наилучшим образом.

sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file

Неважно, сколько символов "#" есть, оно никогда не добавит другого. Если шаблон, который вы ищете, не содержит "#", он добавит его в начало строки, а также добавит конечное пространство.

Если вы не хотите занимать пробел

sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\1/' file

Ответ 3

sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file

Это не работает для меня с ключевым словом *.sudo, никаких комментариев вообще...

Ony синтаксис ниже работает: sed -e '/sudo/ s/^#*/#/' file