Здравствуйте.Есть текстовый конфиг, в середине которого есть такой блок
/var/log/lastlog {
monthly
rotate 1
}Как бы его закомментировать символом # в начале строки. Спасибо.
P.S. OS FreeBSD 11.2 или Debian 8.x.
> Здравствуйте.
> Есть текстовый конфиг, в середине которого есть такой блок
>
> /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
>perl -00pe 's|\A(/var/log/lastlog\s+{\n)(\s+monthly\n)(\s+rotate\s+1\n)(})|#$1#$2#$3#$4|'\s* в начале и конце строки весьма не помешает
также неплохо снабдить все сивмолы новой строки внутри { } знаком ? ибо не факт что там везде новая строка
>>perl -00pe 's|\A(/var/log/lastlog\s+{\n)(\s+monthly\n)(\s+rotate\s+1\n)(})|#$1#$2#$3#$4|'
> \s* в начале и конце строки весьма не помешает
> также неплохо снабдить все сивмолы новой строки внутри { } знаком ?
> ибо не факт что там везде новая строкаПонял.
Пошел писать регулярку на sed'e.
> Пошел писать регулярку на sed'e.полуношный извращенец - тебе же перловку сваренную дали ))
>> Пошел писать регулярку на 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 непонятно как разбивать выражение по строкам, чтоб добиться бОльшей читабельности...
>>> Пошел писать регулярку на 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 непонятно как разбивать выражение по строкам, чтоб добиться
> бОльшей читабельности...нужно закомментить весь блок или какие-то выборочные строки?
В перле можно сварить весьма крутые, и в тоже время весьма простые регексы. Но! Нужно точно знать может быть на входе с возможными вариантами. От этого и плясать.У мну свой чистильщик/парсер конфигов апача где то валяется. Я там делал немного по другому. Я сначала приводил конфиг к некоторому общему виду (удалении пустых строк и коментов, склеивание многострочных разбивок директив, удалении трейлинг/лединг пробелов, приклеивание инклудов и тд). На выходе у меня получался конфиг в заложенном МНОЙ гарантированном стандарте. А далее для парсинга использовал примитивнейшие правила, ибо четко знал что на входе. Получилось в итоге два разработчика в конвейере - но они оба простые и понятные.
И еще. Многи кто начинает работать с регулярками делают одну существенную ошибку - смотрят на регулярки как на шаблоны поиска, что в корне не верно. Регулярки это суть макрос для настройки алгоритма поиска.
> В перле можно сварить весьма крутые, и в тоже время весьма простые
> регексы. Но! Нужно точно знать может быть на входе с возможными
> вариантами. От этого и плясать.Да.
> У мну свой чистильщик/парсер конфигов апача где то валяется. Я там делал
> немного по другому. Я сначала приводил конфиг к некоторому общему виду
> (удалении пустых строк и коментов, склеивание многострочных разбивок директив, удалении
> трейлинг/лединг пробелов, приклеивание инклудов и тд). На выходе у меня
> получался конфиг в заложенном МНОЙ гарантированном стандарте. А далее для парсинга
> использовал примитивнейшие правила, ибо четко знал что на входе. Получилось в
> итоге два разработчика в конвейере - но они оба простые и
> понятные.своя рука - владыка
кому как ни себе лучше знать, что имеем и что хотим получить> И еще. Многи кто начинает работать с регулярками делают одну существенную ошибку
> - смотрят на регулярки как на шаблоны поиска, что в корне
> не верно. Регулярки это суть макрос для настройки алгоритма поиска.и ещё раз - да! ))
однако, сдаётся мне, что всё это хорошо было бы адресовать тому,
который ни много ни мало называет себя вселенной
> своя рука - владыка
> кому как ни себе лучше знать, что имеем и что хотим получитьТут дело в разных подходах, а не в конкретных руках.
> однако, сдаётся мне, что всё это хорошо было бы адресовать тому,
> который ни много ни мало называет себя вселеннойну дак ему и адресовано
кхе кхе его ник как бы не тянет совсем на вселенную )) а даже скорее наоборот если правильно перевести
> однако, сдаётся мне, что всё это хорошо было бы адресовать тому,
> который ни много ни мало называет себя вселеннойВселенная - universe.
Так что не надо мне приписывать манию величия.
> нужно закомментить весь блок или какие-то выборочные строки?Этот конкретный блок.
Но я расширил и добавил варианты форматирования, в разных сборках ядра линукса по-разному форматируют конфиги.