Это старая версия документа!
Просмотр файлов
cat - содержимое файла в поток вывода.
tail - заданное кол-во строк с конца файла + интерактивное обновление.
head - заданное кол-во строк с начала файла.
less - постраничный просмотр.
cat
Для записи в файл можно использовать перенаправление ввода ».
-n (-b) - нумеровать строки (только не пустые).
-s - удалять пустые строки.
-E - показывать символ $ в конце каждой строки.
-T - отображать символ табуляции.
tail
-f [–pid] - авто-обновление [закрыться с процессом].
-s сек - частота обновления.
-n - кол-во строк (10 по умолчанию).
head
-n - кол-во строк (10 по умолчанию).
–lines=[-]NUM - весь текст, кроме последних NUM строк.
-z - символ новой строки.
less
Фильтрация
grep
grep [опции] шаблон [файл ...]
grep [опции] [-e шаблон | -f файл] [файл ...]
grep 'ключевое слово' - поиск заданного слова/строки.
-B (-A) - кол-во строк до (после) вхождения.
-E (-e) - использование рег выражения (образец)
-P [–perl-regexp] - рег. выражение Perl
-o - вывод только части строки, подходящей под указанный шаблон
-с [–count] - кол-во строк совпадающего (не совпадающего) результата
-D (-d) - действие, применимо к уст-вам или каталогам, можно читать как обычные файлы, в т.ч. рекурсивно
-f [–file] - шаблон из файла, по одному в каждой строке
-v [–invert-match] - изменить смысл совпадения, выбор не совпадающих строк
-w [–word-regexp] (-x [–line-regexp]) - совпадение только всего слова (всей строки)
Пример: Извлечение 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
Пример: over
# 1. Фильтруем строки c нужным IP
# 2. Из этих строк вырезаем значение между "sid=/" и "&"
# 3. Обрезаем последний символ, им будет слеш
# 4. Сортируем
cat log.txt | grep 10.1.192.38 | grep -Po 'sid=/\K[^&]*' | sed -e "s/.$//" | sort
awk
Общий синтаксис: «pattern {action}«, действием могут быть: exit, next, print, printf.
Регулярные выражения обрамляются слэшами »/regex pattern/ {action}«.
$№ - указывает номер поля для вывода, разделяются пробелами.
-OFS - задать разделитель в выводе
BEGIN/END - имеют собственный набор д-й, выполняются один раз
-F - указать разделитель во входных данных, вместо пробела
substr (s, a, b) - подстрока строка-s, кол-во- b, начать с- a. Используется внутри 'print'
Пример: Напечатать только первое и третье слова из каждой строки
# cat 'text' | awk {'print $1,$3'}
Пример: Разделитель
# cat 'text' | awk 'OFS="-" {print $1,$3}'
Встроенные переменные
NF - Количество полей в записи
NR - Номер текущей записи
FILENAME - Имя входного файла, который в данный момент обрабатывается
FS - Разделитель полей
RS - Разделитель записей
OFS - Разделитель выходных полей
ORS - Разделитель выходной записи
Пример: Вывод имени файла и кол-во строк
# awk 'END { print "File", FILENAME, "contains", NR, "lines." }' teams.txt
sed
Потоковый редактор текста. Можно использовать для поиска, вставки, замены и удаления фрагментов в файле или потоке вывода.
sed опции -e команды файл
Опции:
-n - не выводить содержимое буфера шаблона в конце каждой итерации
-f - прочитать команды редактирования из файла
-i - сделать резервную копию файла
-r - поддержка расширенного синтаксиса рег выражений
-s - несколько файлов рассматривать как отдельные потоки, а не один сплошной
У утилиты есть два буфера, активный и дополнительный. Выполняется заданное условие для каждой строки.
Очередная строка попадает сначала в активный буфер, выполняются команды, выводится в поток вывода и буфер очищается, в доп буфере хранится предыдущая строка.
Каждой команде можно передать адрес строки, к которой ее применить (по умолчанию для всех):
номер - номер строки
первая ~шаг (~число) - с первой, далее с указанным шагом (номер строки кратный указанному числу)
$ - последняя строка
/рег. выражение/ - подходящая под рег выражение
номер, номер - с номера до номера
номер, /рег. выражение/ - с номера до рег выражения
номер, +кол-во - с номера до кол-ва
Некоторые команды:
q - завершает работу сценария
d - удаляет буфер и запускает следующую итерацию
p (n) - вывод содержимого буфера шаблона (причитать в него след строку)
s/что_заменять/на_что_заменять/опции - замена символов, поддержка рег выражений
y/символы/символы - замена символов
w - записать содержимое буфера в шаблона в файл
Можно передавать несколько команд, для этого нужно разделить их точкой с запятой или две опции -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
RegEx
Относится как к grep так и к awk.
\ - экранирование
^($) - начало (конец) строки
. - любой одиночный символ
[] - список символов, конкретный перечень, либо диапазон, можно несколько диапазонов, что бы исключить символ, поставьте перед ним \
* - любое кол-во вхождения пред выражения
? - одно либо не одного вхождения пред выражения
+ - как минимум одно вхождение пред выражения
{n} {n,} {,m} {n,m} - повторы вхождения пред выражения
| - оператор ИЛИ
-