Примеры одно строчные скрипты в помощь администратору.
Всем привет, решил реализовать запись на пять коротких, одно строчных команд/скриптов.
Может кому и понадобится.
Поиск по двум условиям, Апрель 14 и 15 числа.
а так же добавляем к уже выбранному нами результату, третье условие размер 5826.
Получает 2402 файлов.
# la -al /usr/local/www/web/upload/234/ | egrep "Apr (15|14)" | grep "5826" | wc -l 2402
Удаляем найденные файлы.
# la -al /usr/local/www/web/upload/234/ | egrep "Apr (15|14)" | grep "5826" | xargs rm -rf --
Поиск по нескольким переменным.
# ls -l | awk '{print $5 " " $9}' | grep -e '^.... .*' | grep -e '^.*65.* ' | awk '{print $2}'
или
…. — это 4ре любых символа , а в нашем случае цыфры ([0-9]{1,4})
(4|5) — ищем 4 и 5 месяцы
^.*81.* — ^ начало, любой символ, 0 или больше раз, что ищем (81), 0 или больше раз, любой символ
# ls -l /usr/local/www/test.local.local/web/upload/234 | egrep '.... ([0-9]{1,4}) Apr (4|5)' | grep -e '^.*81.* '
Как понадобилось мне вытащить из базы все мобильные телефоны и почтовые адреса для рассылки.
Решил рекурсивно из файлового бэкапа базы данных вытянуть нужные данные.
Почтовые адреса.
# egrep -o "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}" /mnt/base.sql > /mnt/mail.txt
Мобильные телефоны.
# egrep -o "\+7[0-9]{10}" /mnt/base.sql > /mnt/tel.txt
* – Любое количество повторяющихся символов/набора, в том числе и нулевое.
+ – Один или больше количество экземпляров символа/набора.
Точка (.) соответствует любому символу.
редактируем содержимое.
https://rer.rrru/decor/aromaty/lamp-berzhe/ https://rer.rrru/decor/lamp-berzhe/ https://rer.rrru/decor/aromaty/dlya-vanny/ https://rer.rrru/decor/dlya-vanny/ cat redirect.txt | sed 's/https\:\/\/rer\.rrru/ /g' | sed 's/$/permanent;/' | sed 's/^/rewrite/' > new_red
получаем
rewrite /decor/aromaty/lamp-berzhe/ /decor/lamp-berzhe/ permanent; rewrite /aromaty/dlya-vanny/ /decor/dlya-vanny/ permanent;
Смотрим ошибки у nginx.
# egrep -v '\HTTP/1.[0-1]\" (200|301)' /var/log/nginx/access.log | awk '{print $1,$6,$9,$14,$16,$18}' | sort | uniq -c | sort -nr | head -n 20 | sed 's/"//g' 5 207.46.13.226 GET 404 bingbot/2.0; 3 217.25.230.26 GET 404 Linux AppleWebKit/537.36 like 2 66.249.76.101 GET 404 Android Nexus Build/MMB29P) 2 46.229.168.85 GET 404 SemrushBot/2~bl; 2 46.229.168.82 GET 404 SemrushBot/2~bl; 2 207.46.13.133 GET 404 bingbot/2.0; 1 95.163.255.241 GET 404 Linux Mail.RU_Bot/2.0; 1 95.163.255.227 GET 404 Linux Mail.RU_Bot/2.0; 1 95.163.255.225 GET 404 Linux Mail.RU_Bot/2.0; 1 95.163.255.206 GET 404 Linux Mail.RU_Bot/2.0; 1 95.108.181.81 GET 404 YandexBot/3.0; 1 89.31.18.75 GET 404 NT WOW64) (KHTML, 1 66.249.76.103 GET 404 Android Nexus Build/MMB29P) 1 66.249.76.103 GET 404 (KHTML, Gecko; Googlebot/2.1; 1 66.249.65.159 GET 404 (KHTML, Gecko; Googlebot/2.1; 1 66.249.65.158 GET 404 Googlebot/2.1; 1 66.249.65.158 GET 404 Android Nexus Build/MMB29P) 1 66.249.65.129 GET 404 Android Nexus Build/MMB29P) 1 46.71.43.54 GET 499 NT Win64; AppleWebKit/537.36 1 46.229.168.78 GET 404 SemrushBot/2~bl;
Есть файл (bad_bot) с такой структурой, плохие боты.
omgili socialmediascanner Jooblebot
Его нужно перевести к виду в одну строку, для прогона по урл у сайтов.
$ cat bad_bot | tr '\n' ' ' omgili socialmediascanner Jooblebot SeznamBot Scrapy CCBot
Выбираем только ип адреса.
egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
Быстро меняем содержимое файлов ( с 10.10.40.2 на 192.168.5.78 ) в определенной директории (test_nt).
find /home/bagas/test_nt -type f -exec sed -i -e 's/10.10.40.2\>/192.168.5.78/g' {} \;
Предупреждение: Если запустить команду без символа > , то ип адреса на замену такие попадут (10.10.40.20, 10.10.40.28 и т.д.).
Преобразовываем данные из столбца в строку с разделителем между ними.
111 222 444
Преобразовываем столбец в строку с разделительным символом |
cat /mnt/ttes | awk 'BEGIN {ORS="|"}1' 111|222|444
Эти одно строчные скрипты я буду со временем дописывать и модернизировать.
Допустим нам нужно добавить текст в начале и конце каждой строки.
К примеру у меня файл с редиректами на страницу 410.
Пример на sed:
sed 's/^/rewrite \^/; s/$/\$ \/410.php last;/' my_files.txt
Пример на awk:
awk '{print "rewrite ^"$0}' my_files.txt | awk '{print $0"$ /410.php last;"}'
Понадобилось высчитать сколько прошло дней с даты 00010101 по сегодня 20201105 .
let D=(date +%s -d 20201105-date +%s -d 00010101)/86400;echo $D дня. 737733 дня.
Смотрим список системных процессов с названием столбцов утилиты ps.
ps aux | (head -1; grep google)
Либо так.
ps aux | sed -n '1p;/google/p'
Убираем не нужное слово в поте данных.
$ echo 'My one "value0="111" value1="222.war" value2="111" test.' | sed 's/value1\=\"[0-9]*\.[a-zA-Z]*\"[[:space:]]//' Получим. My one "value0="111" value2="111" test.
Смотрим какой ip адрес у домена.
Для nginx.
egrep -r listen /usr/local/etc/nginx/sites-enabled/ | cut -f7 -d / | egrep '443' | egrep -v ':[[:blank:]]{8}|:[[:space:]]' | sed 's/:listen /:/g;s/:443 http2 ssl;//g;' | sort domel.local:4.2.1.2 1domel.local:1.3.4.6 2domel.local:2.3.1.1 3domel.local:3.2.3.1
Для apache.
egrep -r "<VirtualHost" /usr/local/etc/apache24/sites-enabled/ | egrep -v '\:80' | cut -f7 -d / | sed 's/:<VirtualHost /:/g;s/:443>//g;' | sort domel.local:1.2.1.2 1domel.local:4.3.4.6 2domel.local:1.3.1.1 3domel.local:9.2.3.1
Парсинг лог, по времени от и до.
Содержимое начало лога nginx.
1.1.1.1 — — [25/Nov/2021:18:39:58 +0300]
Парсим по времени от 13.30 до 13.49.
awk '$4 >= "[25/Nov/2020:13:30" && $4 < "[25/Nov/2020:13:49"' /var/log/nginx/access.log
Есть список доменов 2 и 3-его уровней, из списка нужны только под домены (3-й уровень).
local.locks zyx.local.local xy2.local.loc local.loc abs532.local.locks local.local
Смотрим что получилось.
sed -r 's/^[^.]+//;s/^.//' zyx.local.local xy2.local.loc abs532.local.locks
Pingback: sed и grep примеры - FRYAHA.RU