Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:overall:views [2023/07/23 13:49] admin [Просмотр файлов] |
linux:overall:views [2024/02/10 14:58] (текущий) admin [sed] |
||
---|---|---|---|
Строка 16: | Строка 16: | ||
* **-w [--word-regexp] (-x [--line-regexp])** - совпадение только всего слова (всей строки) | * **-w [--word-regexp] (-x [--line-regexp])** - совпадение только всего слова (всей строки) | ||
+ | |||
+ | < | ||
+ | < | ||
<code bash> | <code bash> | ||
# Извлечение IP адреса | # Извлечение IP адреса | ||
echo -e " | echo -e " | ||
- | |||
# Извлечение IP адресов с ошибкой авторизации из auth.log | # Извлечение IP адресов с ошибкой авторизации из auth.log | ||
cat / | cat / | ||
- | |||
# Убрать из вывода пустые и закоментированные строки | # Убрать из вывода пустые и закоментированные строки | ||
cat / | cat / | ||
- | |||
# Список IP активных подключений | # Список IP активных подключений | ||
ss -ntlua | grep " | 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 " | ||
Строка 59: | Строка 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 | ||
- | ==== Встроенные переменные ==== | + | awk '/ |
- | * **NF** - Количество полей в записи | + | </ |
- | * **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; | ||
</ | </ | ||
+ | </ | ||
Строка 120: | Строка 170: | ||
Можно передавать несколько команд, | Можно передавать несколько команд, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | :!: **Не прпускает символ амперсанд и оба слеша**\\ | ||
+ | |||
+ | <code bash> | ||
+ | # -i чтобы сохранить в тот же файл | ||
+ | sed -i ' | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
< | < | ||
< | < |