URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10242
[ Назад ]

Исходное сообщение
"Нужно закомментировать блок теста"

Отправлено universite , 04-Окт-18 19:35 
Здравствуйте.

Есть текстовый конфиг, в середине которого есть такой блок


/var/log/lastlog {
    monthly
    rotate 1
}

Как бы его закомментировать символом # в начале строки. Спасибо.

P.S. OS FreeBSD 11.2 или Debian 8.x.


Содержание

Сообщения в этом обсуждении
"Нужно закомментировать блок теста"
Отправлено михалыч , 05-Окт-18 17:16 
> Здравствуйте.
> Есть текстовый конфиг, в середине которого есть такой блок
>
 
> /var/log/lastlog {
>     monthly
>     rotate 1
> }
>

> Как бы его закомментировать символом # в начале строки. Спасибо.
> P.S. OS FreeBSD 11.2 или Debian 8.x.

Пожалуйста.

perl -00pe 's|\A(/var/log/lastlog\s+{\n)(\s+monthly\n)(\s+rotate\s+1\n)(})|#$1#$2#$3#$4|' file


"Нужно закомментировать блок теста"
Отправлено Pahanivo , 05-Окт-18 20:23 

>
perl -00pe 's|\A(/var/log/lastlog\s+{\n)(\s+monthly\n)(\s+rotate\s+1\n)(})|#$1#$2#$3#$4|' 

\s* в начале и конце строки весьма не помешает
также неплохо снабдить все сивмолы новой строки внутри { } знаком ? ибо не факт что там везде новая строка


"Нужно закомментировать блок теста"
Отправлено universite , 05-Окт-18 21:03 
>>
perl -00pe 's|\A(/var/log/lastlog\s+{\n)(\s+monthly\n)(\s+rotate\s+1\n)(})|#$1#$2#$3#$4|' 
> \s* в начале и конце строки весьма не помешает
> также неплохо снабдить все сивмолы новой строки внутри { } знаком ?
> ибо не факт что там везде новая строка

Понял.
Пошел писать регулярку на sed'e.


"Нужно закомментировать блок теста"
Отправлено Pahanivo , 06-Окт-18 00:05 
> Пошел писать регулярку на sed'e.

полуношный извращенец - тебе же перловку сваренную дали ))


"Нужно закомментировать блок теста"
Отправлено universite , 06-Окт-18 15:03 
>> Пошел писать регулярку на sed'e.
> полуношный извращенец - тебе же перловку сваренную дали ))

Только когда для тестов добавляешь пробелы и табуляторы в начале и конце строк этого блока конфига, регулярка сдувается...

последняя моя попытка была на :


perl -i -00pe 's|\A(\s*/var/log/lastlog\s+{\n)(\s*\s+monthly\s*\n)(\s*\s+rotate\s*\s+1\n)(\s*}\s*)|#$1#$2#$3#$4|' logrotate.conf

Плюс в синтаксисе Perl непонятно как разбивать выражение по строкам, чтоб добиться бОльшей читабельности...


"Нужно закомментировать блок теста"
Отправлено михалыч , 07-Окт-18 11:26 
>>> Пошел писать регулярку на sed'e.
>> полуношный извращенец - тебе же перловку сваренную дали ))
> Только когда для тестов добавляешь пробелы и табуляторы в начале и конце
> строк этого блока конфига, регулярка сдувается...
> последняя моя попытка была на :
>
 
> perl -i -00pe 's|\A(\s*/var/log/lastlog\s+{\n)(\s*\s+monthly\s*\n)(\s*\s+rotate\s*\s+1\n)(\s*}\s*)|#$1#$2#$3#$4|'
> logrotate.conf
>

выше подсказали - использовать \s*

perl -00pe 's|\A(\s*/var/log/lastlog\s*{\s*\n)(\s*monthly\s*\n)(\s*rotate\s+1\s*\n)(\s*}\s*)|#$1#$2#$3#$4|' logrotate.conf


> Плюс в синтаксисе Perl непонятно как разбивать выражение по строкам, чтоб добиться
> бОльшей читабельности...

нужно закомментить весь блок или какие-то выборочные строки?


"Нужно закомментировать блок теста"
Отправлено Pahanivo , 08-Окт-18 10:12 
В перле можно сварить весьма крутые, и в тоже время весьма простые регексы. Но! Нужно точно знать может быть на входе с возможными вариантами. От этого и плясать.

У мну свой чистильщик/парсер конфигов апача где то валяется. Я там делал немного по другому. Я сначала приводил конфиг к некоторому общему виду (удалении пустых строк и коментов, склеивание многострочных разбивок директив, удалении трейлинг/лединг пробелов, приклеивание инклудов  и тд). На выходе у меня получался конфиг в заложенном МНОЙ гарантированном стандарте. А далее для парсинга использовал примитивнейшие правила, ибо четко знал что на входе. Получилось в итоге два разработчика в конвейере - но они оба простые и понятные.

И еще. Многи кто начинает работать с регулярками делают одну существенную ошибку - смотрят на регулярки как на шаблоны поиска, что в корне не верно. Регулярки это суть макрос для настройки алгоритма поиска.


"Нужно закомментировать блок теста"
Отправлено михалыч , 08-Окт-18 15:33 
> В перле можно сварить весьма крутые, и в тоже время весьма простые
> регексы. Но! Нужно точно знать может быть на входе с возможными
> вариантами. От этого и плясать.

Да.

> У мну свой чистильщик/парсер конфигов апача где то валяется. Я там делал
> немного по другому. Я сначала приводил конфиг к некоторому общему виду
> (удалении пустых строк и коментов, склеивание многострочных разбивок директив, удалении
> трейлинг/лединг пробелов, приклеивание инклудов  и тд). На выходе у меня
> получался конфиг в заложенном МНОЙ гарантированном стандарте. А далее для парсинга
> использовал примитивнейшие правила, ибо четко знал что на входе. Получилось в
> итоге два разработчика в конвейере - но они оба простые и
> понятные.

своя рука - владыка
кому как ни себе лучше знать, что имеем и что хотим получить

> И еще. Многи кто начинает работать с регулярками делают одну существенную ошибку
> - смотрят на регулярки как на шаблоны поиска, что в корне
> не верно. Регулярки это суть макрос для настройки алгоритма поиска.

и ещё раз - да! ))

однако, сдаётся мне, что всё это хорошо было бы адресовать тому,
который ни много ни мало называет себя вселенной


"Нужно закомментировать блок теста"
Отправлено Pahanivo , 08-Окт-18 17:17 
> своя рука - владыка
> кому как ни себе лучше знать, что имеем и что хотим получить

Тут дело в разных подходах, а не в конкретных руках.

> однако, сдаётся мне, что всё это хорошо было бы адресовать тому,
> который ни много ни мало называет себя вселенной

ну дак ему и адресовано
кхе кхе его ник как бы не тянет совсем на вселенную )) а даже скорее наоборот если правильно перевести


"Нужно закомментировать блок теста"
Отправлено universite , 14-Окт-18 22:55 
> однако, сдаётся мне, что всё это хорошо было бы адресовать тому,
> который ни много ни мало называет себя вселенной

Вселенная - universe.
Так что не надо мне приписывать манию величия.


"Нужно закомментировать блок теста"
Отправлено universite , 14-Окт-18 22:56 

> нужно закомментить весь блок или какие-то выборочные строки?

Этот конкретный блок.
Но я расширил и добавил варианты форматирования, в разных сборках ядра линукса по-разному форматируют конфиги.