Утилиты CentOS для поиска вхождений и фильтрации текстовых файлов
Awk –скриптовый язык для обработки шаблонов по заданным правилам. Синтаксис подобен языку С. Общий вид команд awk: где pattern — это шаблон, а action — действие, которое будет выполнено после того как awk найдет шаблон в строке. Шаблонами могут быть: Обычные символы, такие как пробел, подчеркивание (_), AZ, az, 0-9. Метасимволы(регулярные выражения), которые подобны метасимволам […]
Awk –скриптовый язык для обработки шаблонов по заданным правилам. Синтаксис подобен языку С.
Общий вид команд awk:
awk '/pattern/action' filename
где pattern — это шаблон, а action — действие, которое будет выполнено после того как awk найдет шаблон в строке.
Шаблонами могут быть:
- Обычные символы, такие как пробел, подчеркивание (_), AZ, az, 0-9.
- Метасимволы(регулярные выражения), которые подобны метасимволам в shell, включают в себя:
- соответствует любому отдельному символу кроме новой строки.
- соответствует нулю или более совпадениям предшествующего ему символа.
- [символ(ы)] соответствует любому из указанных символов, также допустимо использовать дефис ‘-‘ , означающий диапазон символов. В качестве шаблона можно указать диапазоны:
- [0-9] означает одно число от 0 до 9
- [a-z] одна строчная буква
- [A-Z] одна заглавная буква
- [a-zA-Z] одна заглавная или строчная буква
- [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 может получить опции из файла, для этого утилиту необходимо запустить с ключом –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
Если был задан шаблон localhost awk выведет строки, содержащие localhost в файле /etc/sysconfig/network-scripts/ifcfg-eth0.
awk '/localhost/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
В нижеприведенном примере шаблон B..T будет соответствовать строкам, содержащим ‘BOOT’: ONBOOT, BOOTPROTO
awk '/B..T/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
Шаблон e*t будет соответствовать строкам, в которых есть подстроки(часть строки), начинающиеся с e, заканчивающиеся на t и содержащие любые символы между ними.
awk '/e*t/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
Шаблон [bl1], будет соответствовать всем строкам, содержащим символ b или l или 1 в файле /etc/sysconfig/network-scripts/ifcfg-eth0.
awk '/[bl1]/{print}' /etc/sysconfig/network-scripts/ifcfg-eth0
Awk может обработать текст, разбитый на несколько блоков. параметр –F определяет «:» как разделитель. Разделитель (по умолчанию — пробел) может быть не только символом, но и регулярным выражением или null (если указан как “”). Обрабатывая команду print $1, awk выводит поле, находящееся в строках файла на первом месте(до разделителя). Нижеприведенная команда распечатает список всех учетных записей в системе:
awk -F":" '{ print $1 }' /etc/passwd
Утилита awk может соединить несколько блоков, например первый и третий. Также можно подписать блоки и добавить форматирование:
- \t – символ горизонтальной табуляции
- \v – вертикальная табуляция
- \r\n – перевод строки, с переводом позиции печати в крайнее левое положение
- \f – печать со следующей страницы
- awk -F»:» ‘{print «username: » $1 «\t\tuid:» $3″}’ /etc/passwd
Sed — текстовый редактор, выполняющий ввод/вывод, удаление, поиск, замену на основе введенных шаблонов. В sed, как и в awk, также возможно использование регулярных выражений в шаблонах. Общий синтаксис команды:
sed опции файл
Замена строки или подстроки выполняется с помощью следующей
опции ‘s/шаблон_поиска/строка_замены/флаг’.
Здесь «s» указывает на
операцию подстановки. «/»- разделители. Можно задавать sed другие
разделители. Разделителем будет считаться символ, встреченный сразу после
s
.
- Если в качестве флага передан номер — будет заменено вхождение, соответствующее этому номеру.
- Флаг g — обработка всех вхождений шаблона, имеющиющихся в строке.
- Флаг p — указывает на то, что нужно вывести содержимое исходной строки.
- Флаг w outputfile указывает, что результаты редактирования текста необходимо записать в файл.
Sed, может также использовать в качестве входных данных STDIN:
echo "print 'строка';" | sed 's/print/echo/'
Для выполнения нескольких команд sed можно использовать параметр-e. Команды Sed должны быть разделены точкой с запятой без пробелов.
Для замены нескольких подстрок и сохранения результатов в файл необходимо использовать команду:
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, и вводить правила с новой строки.
Если команд для обработки текста много, то их можно записать в файл. Для ввода команд из файла используется ключ –f. В этом случае общий синтаксис будет такой:
sed -f файл_с_командами файл_входных_данных
sed -e ‘s/ echo/ print /’ file3.php
В sed возможно указание номера одной строки, которую нужно обработать:
sed -e '2s/$num/$number/' file3.php
Также, возможно указать диапазон строк:
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 и выведет результат на экран
Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.