Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:overall:views [2021/12/10 10:53] admin |
linux:overall:views [2024/02/10 14:58] (текущий) admin [sed] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Фильтрация ====== | + | ====== Фильтрация |
===== grep ===== | ===== grep ===== | ||
< | < | ||
Строка 6: | Строка 5: | ||
grep [опции] [-e шаблон | -f файл] [файл ...] | grep [опции] [-e шаблон | -f файл] [файл ...] | ||
</ | </ | ||
- | |||
* **grep ' | * **grep ' | ||
* **-B (-A)** - кол-во строк до (после) вхождения. | * **-B (-A)** - кол-во строк до (после) вхождения. | ||
Строка 18: | Строка 16: | ||
* **-w [--word-regexp] (-x [--line-regexp])** - совпадение только всего слова (всей строки) | * **-w [--word-regexp] (-x [--line-regexp])** - совпадение только всего слова (всей строки) | ||
- | :!: Пример: | ||
- | <code bash> | ||
- | # echo -e " | ||
- | </ | ||
- | :!: Пример: Извлечение IP адресов с ошибкой авторизации из auth.log | + | < |
+ | < | ||
<code bash> | <code bash> | ||
- | # sudo cat / | + | |
+ | echo -e " | ||
+ | # Извлечение IP адресов с ошибкой авторизации из auth.log | ||
+ | cat / | ||
+ | # Убрать из вывода пустые и закоментированные строки | ||
+ | cat / | ||
+ | # Список IP активных подключений | ||
+ | ss -ntlua | grep " | ||
</ | </ | ||
- | < | + | : Скриптом добавить эти адреса в блок |
- | < | + | |
<code bash> | <code bash> | ||
- | # | + | |
- | # Сначала создаем отдельную цепочку для этого и ставим ее в начало " | + | |
iptables -N BLACKLIST | iptables -N BLACKLIST | ||
iptables -I INPUT -j BLACKLIST | iptables -I INPUT -j BLACKLIST | ||
- | + | | |
- | # Затем читаем из файла список адресов и добавляем правила | + | |
readarray lst < /../ip.list | readarray lst < /../ip.list | ||
for i in " | for i in " | ||
Строка 44: | Строка 43: | ||
</ | </ | ||
</ | </ | ||
+ | |||
Строка 49: | Строка 49: | ||
Общий синтаксис: | Общий синтаксис: | ||
Регулярные выражения обрамляются слэшами **"/ | Регулярные выражения обрамляются слэшами **"/ | ||
- | |||
* **$№** - указывает номер поля для вывода, | * **$№** - указывает номер поля для вывода, | ||
* $0 - вся строка | * $0 - вся строка | ||
Строка 57: | Строка 56: | ||
* **-F** - указать разделитель во входных данных, | * **-F** - указать разделитель во входных данных, | ||
* **substr (s, a, b)** - подстрока строка-s, | * **substr (s, a, b)** - подстрока строка-s, | ||
+ | * | ||
+ | * **Встроенные переменные: | ||
+ | * **NF** - Количество полей в записи | ||
+ | * **NR** - Номер текущей записи | ||
+ | * **FILENAME** - Имя входного файла, который в данный момент обрабатывается | ||
+ | * **FS** - Разделитель полей | ||
+ | * **RS** - Разделитель записей | ||
+ | * **OFS** - Разделитель выходных полей | ||
+ | * **ORS** - Разделитель выходной записи | ||
+ | |||
+ | < | ||
+ | < | ||
+ | Преимущество перед sed в том что сразу экранируются некоторые символы, | ||
+ | Пропустил / а вот & b \ тоже не пропустил | ||
- | :!: Пример: | ||
<code bash> | <code bash> | ||
- | # cat 'text' | + | |
+ | awk '{gsub(/< | ||
+ | |||
+ | # Сохранить резы в тот же файл, чтобы сразу нет такого параметра | ||
+ | awk '{gsub(/< | ||
+ | |||
+ | # Тоже самое только групповая замена | ||
+ | awk '{\ | ||
+ | gsub(/< | ||
+ | gsub(/< | ||
+ | gsub(/< | ||
+ | print }' | ||
+ | |||
+ | # Сохранить изменения в этом же файле !! Это уже другая утилита | ||
+ | gawk -i inplace '{ gsub(/< | ||
</ | </ | ||
+ | </ | ||
- | :!: Пример: Разделитель | + | |
+ | |||
+ | < | ||
+ | < | ||
<code bash> | <code bash> | ||
- | # cat ' | + | cat ' |
- | </ | + | |
+ | cat ' | ||
+ | # Вывод имени файла и кол-во строк | ||
+ | awk 'END { print " | ||
+ | awk ' | ||
+ | awk 'BEGIN { print " | ||
- | ==== Встроенные переменные ==== | + | awk 'BEGIN { printf "%-10s %s\n", " |
+ | printf "%-10s %s\n", " | ||
+ | { printf "%-10s %s\n", $1, $2 }' mail-data | ||
- | * **NF** - Количество полей в записи | + | awk '/ |
- | * **NR** - Номер текущей записи | + | </ |
- | * **FILENAME** - Имя входного файла, который в данный момент обрабатывается | + | |
- | * **FS** - Разделитель полей | + | |
- | * **RS** - Разделитель записей | + | |
- | * **OFS** - Разделитель выходных полей | + | |
- | * **ORS** - Разделитель выходной записи | + | |
- | :!: Пример: Вывод имени | + | Группировка и сложение |
<code bash> | <code bash> | ||
- | # awk 'END { print "File", | + | US|A|1000|2000 |
+ | US|B|1000|2000 | ||
+ | US|C|1000|2000 | ||
+ | UK|1|1000|2000 | ||
+ | UK|1|1000|2000 | ||
+ | UK|1|1000|2000 | ||
+ | |||
+ | awk 'BEGIN { FS=OFS=SUBSEP="|"}{arr[$1,$2]+=$3+$4 }END {for (i in arr) print i,arr[i]}' | ||
+ | |||
+ | US|A|3000 | ||
+ | US|B|3000 | ||
+ | US|C|3000 | ||
+ | UK|1|9000 | ||
+ | |||
+ | # Вариации | ||
+ | # Сложить кол-во указанное напротив значений | ||
+ | awk 'BEGIN { FS=OFS} {arr[$1]+=$2 }END {for (i in arr) print i,arr[i]}' | ||
+ | # Два столбца | ||
+ | awk 'BEGIN { FS=OFS} {arr[$1]+=$2; | ||
</ | </ | ||
+ | </ | ||
+ | |||
Строка 96: | Строка 148: | ||
* **-r** - поддержка расширенного синтаксиса рег выражений | * **-r** - поддержка расширенного синтаксиса рег выражений | ||
* **-s** - несколько файлов рассматривать как отдельные потоки, | * **-s** - несколько файлов рассматривать как отдельные потоки, | ||
- | |||
У утилиты есть **два буфера**, | У утилиты есть **два буфера**, | ||
Очередная строка попадает сначала в активный буфер, выполняются команды, | Очередная строка попадает сначала в активный буфер, выполняются команды, | ||
Строка 116: | Строка 167: | ||
* **y/ | * **y/ | ||
* **w** - записать содержимое буфера в шаблона в файл | * **w** - записать содержимое буфера в шаблона в файл | ||
+ | * **i** - сохранять изменения в файл | ||
Можно передавать несколько команд, | Можно передавать несколько команд, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | :!: **Не прпускает символ амперсанд и оба слеша**\\ | ||
+ | |||
+ | <code bash> | ||
+ | # -i чтобы сохранить в тот же файл | ||
+ | sed -i ' | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
< | < | ||
Строка 134: | Строка 198: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | Удалить все пробелы | ||
+ | <code bash>$ echo " | ||
+ | |||
===== RegEx ===== | ===== RegEx ===== | ||
Относится как к **grep** так и к **awk**.\\ | Относится как к **grep** так и к **awk**.\\ | ||
- | |||
* **\** - экранирование | * **\** - экранирование | ||
* **^($)** - начало (конец) строки | * **^($)** - начало (конец) строки | ||
Строка 149: | Строка 216: | ||
* **{n} {n,} {,m} {n,m}** - повторы вхождения пред выражения | * **{n} {n,} {,m} {n,m}** - повторы вхождения пред выражения | ||
* **|** - оператор ИЛИ | * **|** - оператор ИЛИ | ||
+ | |||
Строка 159: | Строка 227: | ||
* **{n}, {n,}, {n,m}** - ровно n, n или несколько вхождений, | * **{n}, {n,}, {n,m}** - ровно n, n или несколько вхождений, | ||
* **a | b** - " | * **a | b** - " | ||
- | * ** ** - | + | * **i** - не учитывать регистр |
- | * ** ** - | + | * **\K** - задает условное начало строки от найденного фрагмента |
- | * ** ** - | + | |
- | * ** ** - | + | |
- | * ** ** - | + | |
- | * ** ** - | + | |
Строка 190: | Строка 254: | ||
</ | </ | ||
</ | </ | ||
- | |||
< | < | ||
Строка 197: | Строка 260: | ||
# Вывод только имени пользователя, | # Вывод только имени пользователя, | ||
sudo cat / | sudo cat / | ||
+ | |||
+ | # Список подключений из ss | ||
+ | sudo ss -ntlua | grep " | ||
</ | </ | ||
- | </ | ||
+ | Вывод файла, сортировка, | ||
+ | <code bash> | ||
+ | cat list.csv | sort | uniq -c | [column -t |] sort -r | ||
+ | </ | ||
+ | </ | ||
====== Просмотр файлов ====== | ====== Просмотр файлов ====== | ||
+ | * **cat** - содержимое файла в поток вывода | ||
+ | * **tail** - заданное кол-во строк с конца файла + интерактивное обновление | ||
+ | * **head** - заданное кол-во строк с начала файла | ||
+ | * **less** - постраничный просмотр | ||
+ | * **column** - вывод в табличном виде | ||
- | * **cat** | + | < |
- | * **tail** - заданное кол-во строк с конца файла + интерактивное обновление. | + | < |
- | * **head** - заданное кол-во строк с начала файла. | + | |
- | * **less** - постраничный просмотр. | + | |
- | + | ||
- | + | ||
- | =====cat===== | + | |
Для записи в файл можно использовать перенаправление ввода **>> | Для записи в файл можно использовать перенаправление ввода **>> | ||
- | |||
* **-n (-b)** - нумеровать строки (только не пустые). | * **-n (-b)** - нумеровать строки (только не пустые). | ||
* **-s** - удалять пустые строки. | * **-s** - удалять пустые строки. | ||
* **-E** - показывать символ $ в конце каждой строки. | * **-E** - показывать символ $ в конце каждой строки. | ||
* **-T** - отображать символ табуляции. | * **-T** - отображать символ табуляции. | ||
+ | </ | ||
- | =====tail===== | + | < |
+ | < | ||
* **-f [--pid]** - авто-обновление [закрыться с процессом]. | * **-f [--pid]** - авто-обновление [закрыться с процессом]. | ||
* **-s сек** - частота обновления. | * **-s сек** - частота обновления. | ||
* **-n** - кол-во строк (10 по умолчанию). | * **-n** - кол-во строк (10 по умолчанию). | ||
+ | </ | ||
- | =====head===== | + | < |
+ | < | ||
* **-n** - кол-во строк (10 по умолчанию). | * **-n** - кол-во строк (10 по умолчанию). | ||
* **--lines=[-]NUM** - весь текст, кроме последних NUM строк. | * **--lines=[-]NUM** - весь текст, кроме последних NUM строк. | ||
* **-z** - символ новой строки. | * **-z** - символ новой строки. | ||
+ | </ | ||
- | =====less===== | + | < |
- | * **-i (-I)** - игнорировать регистр паттерна | + | < |
+ | * **-i (-I)** - игнорировать регистр паттерна | ||
* **-n (-N)** - не выводить (выводить) номера строк | * **-n (-N)** - не выводить (выводить) номера строк | ||
+ | </ | ||
+ | | ||
+ | |||
+ | < | ||
+ | < | ||
+ | Можно перенаправлять вывод, можно подавать файлы. Гуглятся целый ряд всяких параметров но что то нихрена толком не работает | ||
+ | * **-t** - для табличной формы | ||
+ | * **-s " | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | https:// | ||
+ | |||
+ | </ | ||