Екатерина
26.07.2019
469

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

Awk –скриптовый язык для обработки шаблонов по заданным правилам. Синтаксис подобен языку С. Общий вид команд awk: awk ‘/pattern/action’ filename где pattern – это шаблон, а action – действие, которое будет выполнено после того как awk найдет шаблон в строке. Также, awk может получить опции из файла, для этого утилиту необходимо запустить с ключом –f. […]

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

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

awk ‘/pattern/action’ filename

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

Шаблонами могут быть:<br> ·         Обычные символы, такие как пробел, подчеркивание (_), AZ, az, 0-9.<br> ·         Метасимволы(регулярные выражения), которые подобны метасимволам в shell, включают в себя:<br> o   . соответствует любому отдельному символу кроме новой строки.<br> o   * соответствует нулю или более совпадениям предшествующего ему символа.<br> o   [символ(ы)]  соответствует любому из указанных символов, также допустимо использовать дефис ‘-‘ , означающий диапазон символов. В качестве шаблона можно указать диапазоны:<br> §  [0-9] означает одно число от 0 до 9<br> §  [a-z] одна строчная буква<br> §  [A-Z] одна заглавная буква<br> §  [a-zA-Z] одна заглавная или строчная буква<br> §  [a-zA-Z0-9] одна буква или цифра<br> o   ^ обозначает начало строки в файле.<br> o   $ обозначает конец строки в файле.<br> o   \ служебный символ, отменяющий значение метасимвола, например используется для экранирования кавычек(кавычки являются служебным символом, если необходимо найти кавычки в строке, нельзя указать  просто ‘), т.е. для указания символа кавычек, например \’ в текстовой строке строке ограниченной двумя кавычками ‘\’’.<br> o   a1|a2   a1 или a2<br> o   a* ноль или большее количество a<br> o   a+ один или большее количество a<br> o   a? ноль или один a<br>  <br> Операторы в awk:<br> if (выражение) оператор [ else оператор]<br> while (выражение) оператор<br> for (выражение;выражение;выражение) оператор<br> for (выражение in массив) оператор<br> break <br> continue <br> ([оператор…])<br> переменная = значение или выражение<br> print [список_выражений] [>|>> файл]<br> print [список_выражений] [| процесс]<br> printf [список_выражений] [>|>> файл]<br> printf [список_выражений] [| процесс]<br> next <br> exit (выражение)<br>  <br> Выражения могут быть следующими:<br> &lt;             Меньше чем<br> &lt;=          Меньше или равно<br> ==          Равно<br> !=           Не равно<br> >=          Больше или равно<br> >             Больше чем<br> ~             Входит<br> !~           Не входит<br>  <br> Функции<br> length[()]            Длина строки, по умолчанию $0<br> split(строка,массив,разделители)        Разбить строки<br> substr(строка,начало,длина)  Выделить подстроку<br> index(строка,подстрока)           Найти позицию подстроки в строке. В случае неуспеха возвратит 0<br> getline  Прочитать следующую входную строку. В случае конца файла возврат  1, иначе — 0<br> sprintf(формат,выражение,…)              Форматный вывод в строку<br> exp(выражение)           Экспонента<br> log(выражение)             Натуральный логарифм<br> sqrt(выражение)           Квадратный корень<br> int(выражение)              Округление до ближайшего целого<br>  <br> Также в awk присутствуют предопределенные шаблоны BEGIN и END. <code>BEGIN выполняется до начала обработки входного потока. END — после обработки последней записи входного потока.</code>

Также, 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: <code>sed </code>’s/test/another test/w output'<code>  inputfile или использовать </code>перенаправление вывода > output.txt – перенаправить и заменить имеющиеся данные в файле output.txt,  <code>>> </code>output.txt<code> – сохранить имеющиеся данные в файле, добавить в конец файла </code>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 и выведет результат на экран

 
avatar
  Подписаться  
Уведомление о

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

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

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

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

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices