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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yrkrus
Код:
sed '/НЕКОТОРОЕ/ s/$/ ТУТ ПОДСТАВНОЕ СЛОВО/' /tmp/file1
или так
Код:
sed 's/НЕКОТОРОЕ/& ТУТ ПОДСТАВНОЕ СЛОВО/' /tmp/file1
хз как по фэншую лучше...

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 20:30 10-04-2014 | Исправлено: Alukardd, 20:32 10-04-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Цитата:
Для браузера есть плагины, которые сохраняют таблицу в csv формате. Когда найдёте удобный Вам, покажите выходной формат, и дальше на том же awk легко получить нужный выходной файл.

 
Плагин для Оперы не нашёл. Зато в ней есть возможность изменения меню, в котором, в свою очередь, можно прописать стороннюю программу. Делаю так, в меню прописываю свой пункт:

Код:
Item, "Сохранить в файл" = Execute program, "grabtext", "%t"

 
Скрипт grabtext:

Код:
#!/bin/bash
echo $1 > /home/user/proxies

 
В итоге в файле proxies вот такой фарш:

Код:
1 77.50.220.92:8080 HTTPS NOA 0.716 RU ! logoprom26.starlink.ru 11:04:14-09:20 2 195.14.41.84:8080 HTTPS NOA 0.781 RU Moscow 195.14.41.84 11:04:14-09:19 3 213.170.127.32:3128 HTTPS NOA 2.165 RU subnet32x8.127.quantum.ru 11:04:14-09:09 4 89.251.103.130:8080 HTTPS NOA 2.472 RU 130-103-251-89.citynsk.ru 11:04:14-09:07 5 217.76.43.186:80 HTTPS NOA 6.521 RU Moscow 217.76.43.186 11:04:14-08:39 6 80.64.29.189:8080 HTTPS NOA 0.899 RU 80.64.29.189 11:04:14-07:50 7 81.20.200.182:8080 HTTPS NOA 0.768 RU 81.20.200.182 11:04:14-07:41

 
Либо как-то надо добиться того, чтобы в файл складывалось построчно, либо разбирать эту мешанину, на предмет ip:port.
 
upd
О! Переводы строк победил. Просто в скрипте делаем "$1" и всё в ёлочку!
Вот теперь ваш выход, господа умудрённые опытом. Вот из этого массива данных:
Подробнее...
Надобно сделать рас-файл, пример которого есть в сообщении выше.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 10:22 11-04-2014 | Исправлено: Maximus777, 10:56 11-04-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777Сам скрипт
Код:
#!/usr/bin/gawk -f
BEGIN {
    j=-1
    i=-1
    SITES="/tmp/proxy/sites"
    while (getline < SITES) {
        sites[++i] = $0
    }
}
{
   proxies[++j] = $2  
}
END {
    printf "function FindProxyForURL(url, host)\n{\n  if ("
    for (x=0;x<i;x++)
       printf "shExpMatch(url, \"*"sites[x]"*\") || "  
    print "shExpMatch(url, \"*"sites[i]"*\"))"  
    printf "  {\n    return \""
    for (x=0;x<j;x++)
       printf "PROXY "proxies[x]"; "
    printf "PROXY "proxies[j]";\";"
    print "\n  }\n  return(\"DIRECT\");\n}"
}
На вход получает путь до файла, который вы сохранили из браузера.
Так же читает файл /tmp/proxy/sites
Цитата:
livejournal
ariom


----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 12:54 11-04-2014 | Исправлено: Alukardd, 12:55 11-04-2014
Maximus777

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

Код:
genpacfile /home/user/temp/proxies > /home/user/temp/1.рaс

то файл 1.рас создаётся. Скрипт положил в файл genpacfile. Надо, чтобы команды:

Код:
genpacfile /home/user/temp/proxies

хватало и в результате создавался файл с обработанными скриптом данными. Про print почитал, не внял, можно ли делать вывод в файл.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 21:20 11-04-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
Придётся перенаправлять отдельно каждую команду print — зачем оно Вам?
Чем не устраивает общее перенаправление вывода?
 
Я, кстати, вроде не использовал ни чего специфичного для Gnu AWK, так что можно использовать просто awk.

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 21:44 11-04-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё, разобрался. Доволен, как удав! Спасибо!
 
Сделал в одном файле

Код:
#!/bin/bash
echo "$1" > /home/user/temp/proxies
genpacfile /home/user/temp/proxies > /home/user/temp/1.pac

И этот скрипт прописал в меню Оперы.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 21:52 11-04-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
Для примера изменил Вам скрипт, теперь в конце можете сами решить куда выводить:
Код:
#!/usr/bin/gawk -f
BEGIN {
    j=-1
    i=-1
    SITES="/tmp/proxy/sites"
    while (getline < SITES) {
        sites[++i] = $0
    }
}
{
   proxies[++j] = $2  
}
END {
    res="function FindProxyForURL(url, host)\n{\n  if ("
    for (x=0;x<i;x++)
       res=res"shExpMatch(url, \"*"sites[x]"*\") || "  
    res=res"shExpMatch(url, \"*"sites[i]"*\"))\n"
    res=res"  {\n    return \""
    for (x=0;x<j;x++)
       res=res"PROXY "proxies[x]"; "
    res=res"PROXY "proxies[j]";\";"
    res=res"\n  }\n  return(\"DIRECT\");\n}"
     
    print res > "result.pac"
}  
В таком виде запишет в файл result.pac, можно просто написать print res, тогда выведет на экран.

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 21:53 11-04-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Благодарю! Хоть я уже и применил первый вариант, в любом случае, инфа очень полезная. Сохраню на будущее.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 22:13 11-04-2014
Rasmys

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток увожаемые товарищи!!!
Как и многим на этом форуме не нужна помошь!
Суть следующая:
Имеется приложение запущеное на Weblogic'e которое пишет логи о своей работе каждую минуту.  
Мне необходимо созадать скрипт, который бы читал данные из данного файла, находя определенную фразу или слово (Например ERROR) он отправлял уведомление на почту или по смс, возможно и то и другое.  
Скрипт предпологается запускать cron'ом каждые 5 минут.
Прошу вашей помощи...
 

Всего записей: 5 | Зарегистр. 14-04-2014 | Отправлено: 08:57 14-04-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rasmys
Цитата:
не нужна
обычно людям всё же нужна помощь
 
/bin/grep 'ERROR' /path/to/file | /usr/bin/mailx -s "АУХТУНГ" you@mail.com
Если данная машина не является почтовым сервером, а отправлять письмо надо наружу, то mailx нужно рассказать с какого ящика отправлять и как там пройти аутентификацию.

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 10:42 14-04-2014
Rasmys

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Опечатался, сорри....
 
Все так просто?)
Я в этом деле вообще новичек очень далекий...(  
Может быть есть человечек готовый за пазырек отличного Казахстанского коньячка, потратить свое время и нервы на более глубокий анализ данного вопроса? )
В данном скрипте он ищет слово и отправляет на почту, все согласно моего запроса, Но тут же возникают вопросы:
1. Как сделать так что бы скрипт каждый раз не перечитывал файл с начала, а отлавливал только новые ошибки?  
2. Можно ли в одном скрипте написать сразу просмотр нескольких файлов из разных директорий?
3. Сама машина на котрой все крутиться SUN с SUN OS, всю свою сознательную жизнь открывал форточки(Windows) и вот такая засада...
Для нагладности могу приложить интересующие файлики логов, и думаю лучше перевести данный вопрос в ЛС.

Всего записей: 5 | Зарегистр. 14-04-2014 | Отправлено: 11:44 14-04-2014
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tail -f log_file1 log_file2 | grep --line-buffered word | while read line ; do echo "$line" | mail -s warning user@domain; done

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 12:17 14-04-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
arto
Да, с tail лучше, а то моя команда будет паниковать каждые 5 минут)
 
А вообще я думал что красивее будет использовать fifo.

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 13:16 14-04-2014
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нет, tail вместо cron, иначе может быть пропущено событие.
с cron будет сложнее отыскать место последнего собыия в логфайле, тут либо кеш sha1, либо wc -l + перемотка до позиции.

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 13:28 14-04-2014
Rasmys

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите есть ли замечания вот к такой команде:
tail -f /opt/lanit/RPP/log/RA-1.log | grep --line-buffered "[ERROR]" | while read line ; do echo "$line" | print "ERROR"; done
По сути копия команды arto только хочу что бы в конце он написал мне что есть ошибка.
[ERROR] так записвается в лог, возможно ли так и поиск осуществлять?

Всего записей: 5 | Зарегистр. 14-04-2014 | Отправлено: 15:07 14-04-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rasmys
echo "$line" | print "ERROR"; выведет Вам только слово ERROR, а $line просто уйдёт в никуда.

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 16:07 14-04-2014
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tail -f /opt/lanit/RPP/log/RA-1.log | grep --line-buffered -F "[ERROR]" | while read line ; do echo -n "$line"; print "ERROR"; done  
 
print "ERROR" -- у вас какой шелл?

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 16:24 14-04-2014
Rasmys

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2004 Free Software Foundation, Inc.

Всего записей: 5 | Зарегистр. 14-04-2014 | Отправлено: 07:03 15-04-2014
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а в нём print работает?

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 08:26 15-04-2014
Rasmys

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю( man есть, при запуске команды говорит не найдена...(  
А grep --line-buffered не опознана...(

Всего записей: 5 | Зарегистр. 14-04-2014 | Отправлено: 09:15 15-04-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум 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