Сергей Маликов
26.07.2019
1255

Утилиты CentOS для поиска вхождений и фильтрации текстовых файлов

Awk –скриптовый язык для обработки шаблонов по заданным правилам. Синтаксис подобен языку С. Общий вид команд awk: где pattern — это шаблон, а action — действие, которое будет выполнено после того как awk найдет шаблон в строке. Шаблонами могут быть: Обычные символы, такие как пробел, подчеркивание (_), AZ, az, 0-9. Метасимволы(регулярные выражения), которые подобны метасимволам […]

Утилиты CentOS

Awk –скриптовый язык для обработки шаблонов по заданным правилам. Синтаксис подобен языку С.

Общий вид команд awk:

awk '/pattern/action' filename

где pattern — это шаблон, а action — действие, которое будет выполнено после того как awk найдет шаблон в строке.

Шаблонами могут быть:

  • Обычные символы, такие как пробел, подчеркивание (_), AZ, az, 0-9.
  • Метасимволы(регулярные выражения), которые подобны метасимволам в shell, включают в себя:
  • соответствует любому отдельному символу кроме новой строки.
  • соответствует нулю или более совпадениям предшествующего ему символа.
  • [символ(ы)] соответствует любому из указанных символов, также допустимо использовать дефис ‘-‘ , означающий диапазон символов. В качестве шаблона можно указать диапазоны:
  1. [0-9] означает одно число от 0 до 9
  2. [a-z] одна строчная буква
  3. [A-Z] одна заглавная буква
  4. [a-zA-Z] одна заглавная или строчная буква
  5. [a-zA-Z0-9] одна буква или цифра
  • ^ обозначает начало строки в файле.
  • $ обозначает конец строки в файле.
  • \ служебный символ, отменяющий значение метасимвола, например используется для экранирования кавычек(кавычки являются служебным символом, если необходимо найти кавычки в строке, нельзя указать просто ‘), т.е. для указания символа кавычек, например \’ в текстовой строке строке ограниченной двумя кавычками ‘\’’.
  • a1|a2 a1 или a2
  • a* ноль или большее количество a
  • a+ один или большее количество a
  • a? ноль или один a

Операторы в awk:

  • if (выражение) оператор [ else оператор]
  • while (выражение) оператор
  • for (выражение;выражение;выражение) оператор
  • for (выражение in массив) оператор
  • break
  • continue
  • ([оператор…])
  • переменная = значение или выражение
  • print [списоквыражений] [>|>> файл] print [списоквыражений] [| процесс]
  • printf [списоквыражений] [>|>> файл] printf [списоквыражений] [| процесс]
  • next
  • exit (выражение)

Выражения могут быть следующими:

  • < Меньше чем
  • <= Меньше или равно
  • == Равно
  • != Не равно
  • = Больше или равно
  • Больше чем
  • ~ Входит
  • !~ Не входит

Функции

  • length[()] Длина строки, по умолчанию $0
  • split(строка,массив,разделители) Разбить строки
  • substr(строка,начало,длина) Выделить подстроку
  • index(строка,подстрока) Найти позицию подстроки в строке. В случае неуспеха возвратит 0
  • getline Прочитать следующую входную строку. В случае конца файла возврат 1, иначе — 0
  • sprintf(формат,выражение,…) Форматный вывод в строку
  • exp(выражение) Экспонента
  • log(выражение) Натуральный логарифм
  • sqrt(выражение) Квадратный корень
  • int(выражение) Округление до ближайшего целого
Также в awk присутствуют предопределенные шаблоны BEGIN и END. BEGIN выполняется до начала обработки входного потока. END — после обработки последней записи входного потока.

Также, awk может получить опции из файла, для этого утилиту необходимо запустить с ключом –f. В awk  скрипте можно указать комментарии, они начинаются с символа #.

awk -f script.awk path_to_input_file

Если шаблон не указан, но указано действие {print}  — awk выведет все из /etc/sysconfig/network-scripts/ifcfg-eth0

awk '//{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
Шаблон не указан – вывод awk

Если был задан шаблон localhost awk выведет строки, содержащие localhost в файле /etc/sysconfig/network-scripts/ifcfg-eth0.

awk '/localhost/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
Шаблон localhost – вывод awk

В нижеприведенном примере шаблон B..T будет соответствовать строкам, содержащим ‘BOOT’: ONBOOT, BOOTPROTO

awk '/B..T/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
Шаблон B..T – вывод awk

Шаблон e*t будет соответствовать строкам, в которых есть подстроки(часть строки), начинающиеся с e, заканчивающиеся на t и содержащие любые символы между ними.

awk '/e*t/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
Шаблон e*t – вывод awk

Шаблон [bl1], будет соответствовать всем строкам, содержащим символ b или l или 1 в файле /etc/sysconfig/network-scripts/ifcfg-eth0.

Шаблон [bl1] – вывод awk
awk '/[bl1]/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0

Awk может обработать текст, разбитый на несколько  блоков. параметр –F определяет «:» как разделитель. Разделитель (по умолчанию — пробел) может быть не только символом, но и регулярным выражением или null (если указан как “”). Обрабатывая команду print $1, awk выводит поле, находящееся в строках файла на первом месте(до разделителя). Нижеприведенная команда распечатает список всех учетных записей в системе:

awk -F":" '{ print $1 }' /etc/passwd
Вывод awk первого блока текста, используя разделитель

Утилита awk может соединить несколько блоков, например  первый и третий. Также можно подписать блоки и добавить форматирование:

  • \t – символ горизонтальной табуляции
  • \v – вертикальная табуляция
  • \r\n – перевод строки, с переводом позиции печати в крайнее левое положение
  • \f – печать со следующей страницы
  • awk -F»:» ‘{print «username: » $1 «\t\tuid:» $3″}’ /etc/passwd

Вывод awk первого и третьего блока текста с подписями, используя разделитель

Sed — текстовый редактор, выполняющий ввод/вывод, удаление, поиск, замену на основе введенных шаблонов. В sed, как и в awk, также возможно использование регулярных выражений в шаблонах. Общий синтаксис команды:

sed опции файл

Замена строки или подстроки выполняется с помощью следующей опции  ‘s/шаблон_поиска/строка_замены/флаг’. Здесь  «s» указывает на операцию подстановки. «/»- разделители. Можно задавать sed другие разделители. Разделителем будет считаться символ, встреченный сразу после s.

  • Если в качестве флага передан номер — будет заменено вхождение, соответствующее этому номеру.
  • Флаг g — обработка всех вхождений шаблона, имеющиющихся в строке.
  • Флаг p — указывает на то, что нужно вывести содержимое исходной строки.
  • Флаг w outputfile указывает, что результаты редактирования текста необходимо записать в файл.

Sed, может также использовать в качестве входных данных STDIN:

echo "print 'строка';" | sed 's/print/echo/'
STDIN в качестве входных данных утилиты sed

Для выполнения нескольких команд sed можно использовать параметр-e. Команды Sed должны быть разделены точкой с запятой без пробелов.

Утилитa sed обрабатывает исходные данные из текстового файла и выводит их на экран – для того, чтобы произвести замену в файле необходимо использовать sed с флагом w: sed ‘s/test/another test/w output’ inputfile или использовать перенаправление вывода > output.txt – перенаправить и заменить имеющиеся данные в файле output.txt, >> output.txt – сохранить имеющиеся данные в файле, добавить в конец файла output.txt.

Для замены нескольких подстрок и сохранения результатов в файл необходимо использовать команду:

sed -e 's/print/echo/; s/$i/$num_of_person/w' file.php > file2.php 
или sed -e 's/print/echo/; s/$i/$num_of_person/w file2.php'  file.php

Также, после ввода первой кавычки, можно нажать Enter, и вводить правила с новой строки.

Выполнение нескольких опций в sed

Если команд для обработки текста много, то их можно записать в файл. Для ввода команд из файла используется ключ –f. В этом случае общий синтаксис будет такой:

sed -f файл_с_командами файл_входных_данных
sed -e ‘s/ echo/ print /’  file3.php  

В sed возможно указание номера одной строки, которую нужно обработать:

sed -e '2s/$num/$number/'  file3.php
Задание ограничение по строкам в sed

Также, возможно указать диапазон строк:

sed -e '2,3s/$num/$number/'  file3.php

Можно обработать файл, начиная с указанной строки и до конца:

sed -e '3,$s/$num/$number/'  file3.php
Командой sed возможно также удалять строки. 
sed '1d' file.php  - удалит первую строку в файле file.php
sed '2,3d' file.php  - удалит первую строку в файле file.php
sed '3,$d' file.php  - удалит в файле file.php строки, начиная с третьей и до конца
sed '/print/d' file.php  - удалит в файле file.php строки, в которых есть print
sed '/print/,/echo/d' file.php  - удалит в файле file.php строки, в которых есть print, echo, а также строки, находящиеся между ними.
Если при вызове команды d не указывать номер строки, будут удалены все строки.

Опция i добавляет новую строку перед заданной. Например, следующая команда вставит комментарий перед 2й строкой в file2.php и выведет на экран:

sed '2i\//Вставленный комментарий' ./file2.php
Вставка строки после заданной

Для того, чтобы добавить новую строку после заданной используется опция а. Вставить комментарий после 2й строки в file2.php и вывести на экран:

sed  '2a\//Вставленный комментарий' ./file2.php

Опция c позволяет изменить всю строку текста в потоке данных. При вызове необходимо указать номер строки, вместо которой будет добавлена новая.

sed '2c\//Начало' ./file2.php    – добавит вместо 2й строки указанную
sed '/Вставленный комментарий /c  //Начало' ./file2.php   – замена по шаблону, будут заменены все строки, соответствующие шаблону.
Замена строки

Опция y заменяет по шаблону отдельные символы.

sed 'y/123/012' ./file2.php  - произведет замену 1 на 0, 2 на 1, 3 на 2 и выведет результат на экран.

Опция r, вставит в поток данные из указанного файла.

sed ‘2r comments’ ./file2.php  —  добавит содержимое comments после 2й строки file2.php и выведет результат на экран

sed ‘/COMMENT/r comments’ ./file2.php —  добавит содержимое comments после каждой строки, соответствующей шаблону COMMENT file2.php и выведет результат на экран

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

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

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.