klink0v (klink0v) wrote,
klink0v
klink0v

Пара упражнений с sed

В копилку знаний, просто чтобы самому потом не забыть.

Случай 1. Некая сторонняя софтина что-то передаёт нам на стандартный ввод. При этом мы заранее не знаем сколько и чего там будет. Но доподлинно известно, что в конце блока полезной информации будет обязательно присутствовать пустая строка.

Решение: sed -n '/^$/Q'

Объяснение: sed перебирает входной поток в поисках пустой строки ("^$"). Как только находит, завершает свою работу (команда "Q"). Выхлоп sed-а можно перенаправить pipe-ом в ещё какую-нибудь утилиту, где потом парсить его и всячески дерибанить. Главное, что наш скрипт не "зависнет" на этой строчке, а будет выполняться дальше, даже если на входе мы так и не дождёмся EOF-а.

Случай 2. Нам нужно выдрать некоторую информацию из комментария в конфиге стороннего демона. Заранее известно, что это строка, состоящая из 140 печатных символов (base64). Местонахождение данного комментария внутри конфига может быть любым.

Решение: sed -ne 's/^.*# *\(.\{140\}\)/\1/p' "$FILE"

Объяснение. Ключ "e" говорит перейти в режим редактирования (edit), ключ "n" - не печатать найденные совпадения шаблона без явного на то указания. Ищем по регулярному выражению "начало строки, произвольное количество символов, знак #, произвольное количество пробелов, 140 каких-нибудь символов. Последний компонент шаблона заключен в экранированные скобки, что означает группировку с целью последующего упоминания (back reference). По факту совпадения шаблона в тексте заменяем всю найденную строку на её часть, соответствующую подмножеству в скобках ("\1") и распечатываем ("/p"). Получаем искомую последовательность.

Tags: bash, hints, linux, администрирование
Subscribe

  • Не клеится у меня видеонаблюдение дома...

    Недолго я радовался смонтированной дома у родителей системе видеонаблюдения. Меньше года она исправно проработала. А потом начались какие-то…

  • Juniper SRX <--> Cisco ASA : IPSEC, PRF

    Предыстория вопроса. Приходят очередные контрагенты, говорят "давай строить IPSec-тоннель". Традиционно предлагают DH Group 2 и SHA-1.…

  • Костылескрипт для бэкапа конфигов

    С этой вашей дурацкой работой уже давно никого и ничего не еbashил. Ручки стали забывать как это делается. Сегодня вот решил наверстать упущенное и…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 4 comments