Ответ 1
Предполагая, что у вас нет строк с несколькими #
, это будет работать:
sed -e '/BBB/ s/^#*/#/' -i file
Примечание: вам не нужно /g, поскольку вы выполняете не более одной подстановки на строку.
У меня есть следующий тестовый файл
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: `/'
Любые идеи, как я могу это достичь?
Предполагая, что у вас нет строк с несколькими #
, это будет работать:
sed -e '/BBB/ s/^#*/#/' -i file
Примечание: вам не нужно /g, поскольку вы выполняете не более одной подстановки на строку.
Я считаю, что это решение работает наилучшим образом.
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file
Неважно, сколько символов "#" есть, оно никогда не добавит другого. Если шаблон, который вы ищете, не содержит "#", он добавит его в начало строки, а также добавит конечное пространство.
Если вы не хотите занимать пробел
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\1/' file
sed -i '/![^#]/ s/\(^.*BBB.*$\)/#\ \1/' file
Это не работает для меня с ключевым словом *.sudo
, никаких комментариев вообще...
Ony синтаксис ниже работает:
sed -e '/sudo/ s/^#*/#/' file