Это старая версия документа!
grep [опции] шаблон [файл ...] grep [опции] [-e шаблон | -f файл] [файл ...]
Пример: Извлечение IP адреса
# echo -e "3.123.32.24\nFirst\n567" | grep -Eo "([0-9]{0,3}\.){3}[0-9]{0,3}"
Пример: Извлечение IP адресов с ошибкой авторизации из auth.log
# sudo cat /var/log/auth.log | grep Failed | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort --unique > ip.list
#!/bin/bash # Сначала создаем отдельную цепочку для этого и ставим ее в начало "входа" INPUT iptables -N BLACKLIST iptables -I INPUT -j BLACKLIST # Затем читаем из файла список адресов и добавляем правила readarray lst < /../ip.list for i in "${lst[@]}" do /sbin/iptables -A BLACKLIST -s $i -j DROP done
Общий синтаксис: «pattern {action}«, действием могут быть: exit, next, print, printf.
Регулярные выражения обрамляются слэшами »/regex pattern/ {action}«.
Пример: Напечатать только первое и третье слова из каждой строки
# cat 'text' | awk {'print $1,$3'}
Пример: Разделитель
# cat 'text' | awk 'OFS="-" {print $1,$3}'
Пример: Вывод имени файла и кол-во строк
# awk 'END { print "File", FILENAME, "contains", NR, "lines." }' teams.txt
Потоковый редактор текста. Можно использовать для поиска, вставки, замены и удаления фрагментов в файле или потоке вывода.
sed опции -e команды файл
Опции:
У утилиты есть два буфера, активный и дополнительный. Выполняется заданное условие для каждой строки.
Очередная строка попадает сначала в активный буфер, выполняются команды, выводится в поток вывода и буфер очищается, в доп буфере хранится предыдущая строка.
Каждой команде можно передать адрес строки, к которой ее применить (по умолчанию для всех):
Некоторые команды:
Можно передавать несколько команд, для этого нужно разделить их точкой с запятой или две опции -e.
# Вывод с пятой по десятую строки $ sed -n '5,10p' /file # Весь файл кроме строк с 1 по 20 $ sed '1,20d' /file # Замена во всех строках $ sed 's/root/loost/g' /file # Замена только в указанных строках $ sed '1,10 s/0/10/g' /file # Удаление последних символов $ sed -e "s/.$//" /file
Удалить все пробелы
$ echo "string" | sed -r 's/\s+//g'
Относится как к grep так и к awk.
Синтаксис в целом соответствует
10.1.192.62 - - [18/Aug/2020:01:08:50 +0000] "POST /zabbix/jsrpc.php?sid=/b59ea3cc3hryh446/&type=9&method=screen.get×tamp=1597712895283&mode=0&screenid=58&groupid=&hostid=10262&pageFile=screens.php&profileIdx=web.screens.filter&profileIdx2=58&screenitemid=9594&from=2020-08-14%2000%3A00%3A00&to=2020-08-14%2006%3A00%3A00 HTTP/1.1" 200 845 "Chrome/84.0.4147.125 Safari/537.36" 10.1.192.38 - - [18/Aug/2020:01:08:50 +0000] "POST /zabbix/jsrpc.php?sid=/m85486u/k7kkjklij/&type=9&method=screen.get×tamp=1597712895291&mode=0&screenid=58&groupid=&hostid=10262&pageFile=screens.php&profileIdx=web.screens.filter&profileIdx2=58&screenitemid=9595&from=2020-08-14%2000%3A00%3A00&to=2020-08-14%2006%3A00%3A00 HTTP/1.1" 200 848 "Chrome/84.0.4147.125 Safari/537.36" 10.1.192.38 - - [18/Aug/2020:01:08:50 +0000] "POST /zabbix/jsrpc.php?sid=/kjtg986u76klju89/&type=9&method=screen.get×tamp=1597712895338&mode=0&screenid=58&groupid=&hostid=10262&pageFile=screens.php&profileIdx=web.screens.filter&profileIdx2=58&screenitemid=9597&from=2020-08-14%2000%3A00%3A00&to=2020-08-14%2006%3A00%3A00 HTTP/1.1" 200 840 "Chrome/84.0.4147.125 Safari/537.36" 10.1.192.38 - - [18/Aug/2020:01:08:50 +0000] "POST /zabbix/jsrpc.php?sid=/90ghdkyj78jyyfui/&type=9&method=screen.get×tamp=1597712895349&mode=0&screenid=58&groupid=&hostid=10262&pageFile=screens.php&profileIdx=web.screens.filter&profileIdx2=58&screenitemid=9598&from=2020-08-14%2000%3A00%3A00&to=2020-08-14%2006%3A00%3A00 HTTP/1.1" 200 828 "Chrome/84.0.4147.125 Safari/537.36" 10.1.192.67 - - [18/Aug/2020:01:08:50 +0000] "POST /zabbix/jsrpc.php?sid=/htrifh6gb476fdhr/&type=9&method=screen.get×tamp=1597712895355&mode=0&screenid=58&groupid=&hostid=10262&pageFile=screens.php&profileIdx=web.screens.filter&profileIdx2=58&screenitemid=9599&from=2020-08-14%2000%3A00%3A00&to=2020-08-14%2006%3A00%3A00 HTTP/1.1" 200 873 "Chrome/84.0.4147.125 Safari/537.36"
# 1. Фильтруем строки c нужным IP # 2. Из этих строк вырезаем значение между "sid=/" и "&" # 3. Обрезаем последний символ, им будет слеш # 4. Сортируем cat log.txt | grep 10.1.192.38 | grep -Po 'sid=/\K[^&]*' | sed -e "s/.$//" | sort
# Вывод только имени пользователя, из записей в логе, в уникальном списке sudo cat /var/log/auth.log.1 | grep -oP 'USER=\K[^;]*' | sort -u
Для записи в файл можно использовать перенаправление ввода ».
Можно перенаправлять вывод, можно подавать файлы. Гуглятся целый ряд всяких параметров но что то нихрена толком не работает