Одно строчные скрипты.

Дата | 15.04.2016

Одно строчные скрипты.
Примеры одно строчные скрипты в помощь администратору.
Всем привет, решил реализовать запись на пять коротких, одно строчных команд/скриптов.
Может кому и понадобится.
Поиск по двум условиям, Апрель 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

Одна мысль на “Одно строчные скрипты.

  1. Pingback: sed и grep примеры - FRYAHA.RU

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *