Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
регулярные_выражения._скрипты_для_sed_и_awk [2013/06/19 12:02] kirill |
регулярные_выражения._скрипты_для_sed_и_awk [2014/01/29 23:11] (текущий) |
||
---|---|---|---|
Строка 9: | Строка 9: | ||
gawk [ключи] [программа] [ список файлов] | gawk [ключи] [программа] [ список файлов] | ||
-F fs - разделитель полей | -F fs - разделитель полей | ||
+ | -f файл программы | ||
- | Создадим список с которым будем работать | + | |
+ | Создадим список с которым будем работать | ||
'' | '' | ||
Строка 27: | Строка 29: | ||
ford explor 2003 25 9500'' | ford explor 2003 25 9500'' | ||
+ | |||
+ | Начнем работу. | ||
+ | |||
+ | вывод всего файла. | ||
+ | |||
+ | gawk ' | ||
+ | |||
+ | |||
+ | Вывод отдельных столбцов | ||
+ | |||
+ | gawk ' | ||
+ | |||
+ | Использование шаблона | ||
+ | |||
+ | gawk ' /chevy/ {print}' | ||
+ | |||
+ | |||
+ | Использование оператора соответствия | ||
+ | |||
+ | gawk '$1 ~ /h/' cars.txt | ||
+ | |||
+ | gawk '$1 ~ /^h/' cars.txt | ||
+ | |||
+ | gawk '$2 ~ / | ||
+ | |||
+ | gawk '$3 ~/5$/ {print $3, $1, " | ||
+ | |||
+ | Сравнение | ||
+ | |||
+ | текстовое | ||
+ | |||
+ | gawk '" | ||
+ | |||
+ | числовое | ||
+ | |||
+ | gawk '2000 <=$5 && 9000 > $5' cars.txt | ||
+ | |||
+ | |||
+ | Оператор диаразона | ||
+ | |||
+ | gawk '/ | ||
+ | |||
+ | Работа с файлами программы: | ||
+ | |||
+ | Создадим файл header | ||
+ | |||
+ | |||
+ | '' | ||
+ | BEGIN{ print " Производ. Модель. | ||
+ | |||
+ | {print} | ||
+ | '' | ||
+ | |||
+ | |||
+ | gawk -f header cars.txt | ||
+ | |||
+ | |||
+ | Модифицируем файл header | ||
+ | |||
+ | |||
+ | '' | ||
+ | BEGIN{ print " Производ. Модель. | ||
+ | print " | ||
+ | }\\ | ||
+ | |||
+ | \\ | ||
+ | / | ||
+ | |||
+ | END {\\ | ||
+ | print " | ||
+ | |||
+ | }'' | ||
+ | |||
+ | |||
+ | Проверим | ||
+ | |||
+ | |||
+ | gawk -f header cars.txt | ||
+ | |||
+ | Использование ИЛИ | ||
+ | |||
+ | '' | ||
+ | BEGIN{ print " Производ. Модель. | ||
+ | print " | ||
+ | }\\ | ||
+ | \\ | ||
+ | |||
+ | /volvo/ || /bmw/ {print}\\ | ||
+ | |||
+ | END {\\ | ||
+ | print " | ||
+ | \\ | ||
+ | } | ||
+ | |||
+ | '' | ||
+ | |||
+ | Функция length | ||
+ | |||
+ | gawk ' {print length, $0}' cars.txt | ||
+ | |||
+ | |||
+ | Нумерациия строк | ||
+ | |||
+ | gawk ' {print NR, $0}' cars.txt | ||
+ | |||
+ | Разделители полей | ||
+ | |||
+ | Разбор файла /etc/passwd | ||
+ | |||
+ | BEGIN{ | ||
+ | print " | ||
+ | print " | ||
+ | |||
+ | } | ||
+ | |||
+ | $3>=1000 {print $1 " | ||
+ | |||
+ | END {print " | ||
+ | |||
+ | |||
+ | |||
+ | SED | ||
+ | |||
+ | |||
+ | sed (от англ. Stream EDitor) — потоковый текстовый редактор (а также язык программирования), | ||
+ | |||
+ | Инструкции sed | ||
+ | |||
+ | a - append - добавить | ||
+ | |||
+ | с- change - изменить | ||
+ | |||
+ | d - delete - удалить | ||
+ | |||
+ | i - insert - вставить | ||
+ | |||
+ | n - next - следующаяя строка со следующей инструкцией | ||
+ | |||
+ | p - print - вывести | ||
+ | |||
+ | q - quit - завершить | ||
+ | |||
+ | r(файл) - добавление содержимого файла к выбранной строке | ||
+ | |||
+ | |||
+ | s - substitute - подставить. | ||
+ | |||
+ | флаги | ||
+ | |||
+ | g - global - глобальный режим (все значения) | ||
+ | |||
+ | p - print - вывести измененные строки | ||
+ | |||
+ | w - write - записывать в файл. | ||
+ | |||
+ | |||
+ | |||
+ | Примеры | ||
+ | |||
+ | Задвоение выбранных строк | ||
+ | |||
+ | sed '/ | ||
+ | |||
+ | вывод только измененных строк | ||
+ | |||
+ | sed -n '/ | ||
+ | |||
+ | вывод по номерам строк | ||
+ | |||
+ | sed -n '5,6 p' cars.txt | ||
+ | |||
+ | Вывод первых пяти строк | ||
+ | |||
+ | sed '5 q' cars.txt | ||
+ | |||
+ | |||
+ | Использование файла программы. | ||
+ | |||
+ | Создадим файл print_56 | ||
+ | c содержимым. | ||
+ | |||
+ | 5,6 p | ||
+ | |||
+ | sed -n -f print56 cars.txt | ||
+ | |||
+ | |||
+ | |||
+ | Добавление текста к строкам | ||
+ | |||
+ | sed '2 a\ +++++' cars.txt | ||
+ | |||
+ | sed '2 i\ +++++' cars.txt | ||
+ | |||
+ | |||
+ | Замена строк | ||
+ | файл | ||
+ | сhange_test | ||
+ | |||
+ | '' | ||
+ | 2,4 c \ \\ | ||
+ | ++++++++++++++++++\ | ||
+ | ------------------\ | ||
+ | ******************. | ||
+ | '' | ||
+ | |||
+ | sed -f сhange_test cars.txt | ||
+ | |||
+ | подставка. | ||
+ | |||
+ | файл | ||
+ | subs_demo | ||
+ | |||
+ | s/ | ||
+ | |||
+ | sed -f subs_demo cars.txt | ||
+ | |||
+ | Запись измененных строк в файл | ||
+ | |||
+ | subs_demo2 | ||
+ | |||
+ | s/ | ||
+ | |||
+ | Запись диапазона строк в другой файл. | ||
+ | |||
+ | файл write_demo | ||
+ | |||
+ | 2,4 w temp2 | ||
+ | |||
+ | запись всех строк кроме выбранных | ||
+ | |||
+ | |||
+ | 2,4 !w temp2 | ||
+ | |||
+ | Инструкция (n следующий.) | ||
+ | |||
+ | файл next_demo | ||
+ | |||
+ | 3 n | ||
+ | |||
+ | p | ||
+ | |||
+ | n для шаблона | ||
+ | |||
+ | next_demo2 | ||
+ | |||
+ | /ford/ n | ||
+ | |||
+ | p | ||
+ | |||
+ | Несколько действий | ||
+ | файл action | ||
+ | |||
+ | '' | ||
+ | 2,4 s/ | ||
+ | 3 d'' | ||
+ | |||
+ | Добавление строк | ||
+ | файл app_demo | ||
+ | |||
+ | '' | ||
+ | 2 a\ \\ | ||
+ | +++++++++++\ | ||
+ | ----------- | ||
+ | 3 p | ||
+ | '' | ||
+ | |||
+ | Как получть из лога ftpd айпишники злодеев-брутфорсеров: | ||
+ | |||
+ | cat p.log | grep failed |cut -f1 -d" | ||
+ | |||
+ | cat p.log -- берем лог | ||
+ | |||
+ | grep failed -- берем из лога строки содержащие слово failed | ||
+ | |||
+ | cut -f1 -d" | ||
+ | |||
+ | cut -f2 -d" | ||
+ | |||
+ | sort| uniq -- избавляемся от повторов | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||