Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
ну заменить grep'ы не проблема выражением в gawk, но что-то в целом я запутался.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 15:40 01-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
попробую распутать:
из domain.com сделать .com
в предыдущем скрипте я делал через match и потом split. Наверно можно попроще.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 15:51 01-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Т.е. мою команду можно оставить, только изменить последний кусок, оставив только TLD часть от FQDN?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 17:11 01-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
>только изменить последний кусок, оставив только TLD часть от FQDN?
Да.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 17:52 01-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
echo " Received: from sub.domain.com (mail.domain.com [11.222.333.44] " | gawk '!/localhost|127\.0\.0\.1/{print $3" REJECT Spam_"gensub(/.*\.([[:alpha:]]*)$/,"\\1","",$3)"."}'
 
grep -v, я тоже там уже реализовал как Вы могли заметить.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 19:14 01-10-2013 | Исправлено: Alukardd, 19:21 01-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Уже что-то вырисовывается . Осталось в первом столбце hostname сокращать до 2 уровня и сделать сортировку по TLD и можно запускать в работу.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 14:19 02-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Ну команду sort думаю через pipe уж сами выполните... А саму команду подправил по Вашим просьбам:
gawk '!/localhost|127\.0\.0\.1/{print gensub(/.*\.([[:graph:]]*\.[[:alpha:]]*)$/,"\\1","",$3)" REJECT Spam_"gensub(/.*\.([[:alpha:]]*)$/,"\\1","",$3)"."}'

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 14:45 02-10-2013 | Исправлено: Alukardd, 20:49 05-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. Alukardd - Последний штрих, как в теле почтового сообщения выловить только 2 строку с содержанием "Received: from" - с последним почтовым сервером, который отправил сообщение, тогда возможно первая конструкция, с localhost и 127.0.0.1 будет не нужна.
 
2. Единый csv файл:
10:00;12345;текст
10:00;12346;текст
11:00;12345;текст
12:00;12345;текст
разбить на несколько файлов, чтобы в каждом файле был свой блок со временем и это время было в части имени файла, например исходный 04-10-2013_name.txt, а стал  04-10-2013_10-00_name.txt

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 13:54 04-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Во первых я щас изменил свою предыдующую команду, там надо было использовать [:graph:], вместо [:alpha:] в том месте где выбирается имя домена. TLD вроде как только буквенные, а вот уже само имя домена, может быть и с цифрами и с тире, мб и ещё что может быть, но я не парясь написал graph, т.к. это не форма для проверки, а анализатор логов, так хери там уже по определению быть не должно.
 
1. В письме обычно одна строка Recieved: from, что значит 2-я?
 
2. А какой критерий разбиения-то?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 20:55 05-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd -  
1. В теле письма первая строка "Recieved: from" с последующим содержимым это мой почтовик, который принял письмо. Вторая часть "Recieved: from" это почтовик, который отправил сообщение, вот его доменное имя и надо загонять в текстовый файл для блокировки. Также могут идти ниже несколько "Recieved: from", но они интереса уже не представляют. Скрипт пассивно обрабатывает все строки "Recieved: from", в том числе в которых есть просто IP адрес. Проверю с [:graph:].
 
2. Критерий разбиения: входной файл - 04-10-2013_name.txt,  берем из него строки с одинаковым временем и создаем новый файл в котором после даты будет указанно это время и в самом файл строки с этим временем.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 22:00 05-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
1. Ну хз, у меня exim проставляет один from, а остальные идут by... Ну Вам виднее, что там у Вас да как.
А что, есть разница, что делать: проверять наличие localhost или считать строки? Написать не сложно, реализация простая, но оно имеет смысл или нет?
 
2. gawk -F\; '{print $0 >> gensub(/(.*)_(.*)/,"\\1_"gensub(":","-","",$1)"_\\2","",FILENAME)}' 04-10-2013_name.txt
 
p.s. пора бы Вам уже подружиться с gawk'ом самому.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:34 05-10-2013 | Исправлено: Alukardd, 22:36 05-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. У меня postfix, везде стоит from. В 3 и ниже строках могут быть правильные домены, с которых отправляют почту через relay, который и стоит 2-м from.
 
2. Не получается подружиться, теоретически понятно, а вот на практике результата нет. С григорианской датой 2 суток делал, но написал .

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 22:42 05-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
1. есть ли смысл писать то, о чём вы просили или исключение localhost так же нормально работает?
 
2. результат устраивает?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:24 05-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd - не откажусь от простого примера поиска в 3 строке текста "Received".
/bin/cat $i | /usr/bin/gawk '/Received:/'   - что надо дальше?

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 20:04 07-10-2013 | Исправлено: digital422, 20:04 07-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
/bin/cat $i | /usr/bin/gawk -v i=0 '/^Received/{if (i++ == 2) {print gensub(/.*\.([[:graph:]]*\.[[:alpha:]]*)$/,"\\1","",$3)" REJECT Spam_"gensub(/.*\.([[:alpha:]]*)$/,"\\1","",$3)"."}}'
Найдёт 3-ее вхождение строки начинающейся с Received и отформатировав выведет её.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:14 07-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd - работает, спасибо! Дошел до сортировки
Как вставить между строками символ "#"  
au.domain
au.domain1
com.domain
net.domain
ru.domain
 
чтобы получилось:
 
au.domain
au.domain1
#
com.domain
#
net.domain
#
ru.domain

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 12:21 15-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Критерий разрыва какой? Смена TLD?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 13:39 15-10-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, по TLD, чтобы удобнее было читать разделение.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 13:51 15-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
gawk -F. '{if (FNR == 1) {tld=$1} else { if (tld != $1) {tld=$1; print "#"}}; print}'
 
p.s. исправил ошибку и украсивил чутка ;-)

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 18:55 15-10-2013 | Исправлено: Alukardd, 22:46 15-10-2013
mithridat1



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите,как в баше сделать выход из цикла,то есть так чтобы прервался только цикл,но не скрипт ? Пробовал break,но эта команда  у меня прерывает выполнение всего скрипта.
 
Стоит следующая задача - перебрать массив данных и в случае выполнения определенного условия прервать цикл,иначе - продолжать перебор для выяснения элемента наиболее подходящего другому условию.

Всего записей: 5025 | Зарегистр. 05-01-2006 | Отправлено: 21:06 16-10-2013 | Исправлено: mithridat1, 21:08 16-10-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru