Проблема с чтением содержимого файла журнала каждые 30 минут

Вывод: удалить все комментарии, не относящиеся к шебангу.

sed -e '1{/^\s*\#/{/^\#!/!d}}' -e '1!{/^\s*\#/d}' file

Ваша команда изменена для использования одинарных кавычек (без двойных \\):

sed '/^\(\s\)*\#/d'

будет работать почти правильно, просто добавив деталь, что (после #) должно быть что-то, что не является звездочкой [^!]sed '/^\(\s\)*\#[^!]/d'. Но это не удастся с пустой строкой после символа комментария (#`).

Для этого нужно утверждать, что линия закончилась ($).

Для этого нам потребуется использование расширенного синтаксиса ([^!]|$):

sed -E '/^\s*\#([^!]|$)/d'

Или, более переносимого:

sed -E '/^[ \t]*\#([^!]|$)/d'

Однако для сценария только первая строка, которая начните как #! имеет значение.
Все остальные строки, начинающиеся с необязательного пробела и #, являются комментариями:

sed -e '1{/^#!/!d}' -e '1!{/^[ \t]*#/d}' file

Что означает:

Первая -e

, если первая строка начинается с комментария (пробел и #), но не начинается точно с участием #! он стирается.

Вторая -e

другие строки (1! ), начинающиеся с необязательного пробела и #, удаляются.

1
30.03.2017, 11:05
1 ответ

Используемый вами шаблон grep может предоставлять минуты:секунды вместо часов:минут.

Следующий grep будет более точным:

Обратите внимание, что я добавил «:» после минут, чтобы указать, что секунды спустя.

egrep "06:00:|06:30:"

Или более общий grep:

egrep ":00:|:30:"
0
28.01.2020, 00:58

Теги

Похожие вопросы