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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeyKulikov
Никак. Сед не умеет ревнивого режима. Используйте perl.
 
Добавлено:
Кстати, я бы здесь еще пустое место причесал:
$ perl -pe 's|[[:space:]]*<script.*?>.*?</script>[[:space:]]*| |g' <<< 'Что-то длинное <script тут тоже что-то>тут еще что-то</script> и снова длинный текст <script снова что-то> еще что-то </script> и закончилось.'
Что-то длинное и снова длинный текст и закончилось.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:05 13-05-2011 | Исправлено: ASE_DAG, 15:27 13-05-2011
SergeyKulikov



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG,
А Вы не могли бы показать хоть маленький пример, как это сделать на perl в командной оболочке?
 
Добавлено:
ASE_DAG, спасибо большое за помощь! Я сделал вот так:
 
perl -pe "s|<script[^>]*?>.*?</script>||g" test.sql > new.sql
и отлично работает
 
У меня на php это всегда работало вот так:
$result = preg_replace ( "'<script[^>]*?>.*?</script>'si", "", $fr );
 
 

Цитата:
Кстати, я бы здесь еще пустое место причесал:  
$ perl -pe 's|[[:space:]]*<script.*?>.*?</script>[[:space:]]*| |g' <<< 'Что-то длинное <script тут тоже что-то>тут еще что-то</script> и снова длинный текст <script снова что-то> еще что-то </script> и закончилось.'  
 Что-то длинное и снова длинный текст и закончилось.

Впервые вижу такое: [[:space:]] (надо будет почитать, что это такое)
Да и про <<< не знал, что так можно
Знаю только >, <, >>, |  
 
 
Что-то не понимаю, где можно прочитать про эти ключики -pe в мане на нашел
 
 
 
Все варианты хороши и правильные
[[:space:]]*<script.*?>.*?</script>[[:space:]]* тоже что и \s*<script.*?>.*?</script>\s* и \s*<script[^>]*?>.*?</script>\s*
Проверял тут: http://regexr.com?2tojd

Всего записей: 24 | Зарегистр. 09-02-2011 | Отправлено: 15:35 13-05-2011 | Исправлено: SergeyKulikov, 16:22 13-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeyKulikov
> в мане на нашел
man perlopentut можно почитать, но у Перла маны нетипичного характера — скорее учебник, чем справочник.
А именно ключи, если забыли, можно и у самого интерпретатора спросить:
$ perl --help
 
> спасибо большое
Всегда пожалуйста. :)

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:39 13-05-2011
SergeyKulikov



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
Вы мне уже несколько раз помогали! Огромное спасибо!

Всего записей: 24 | Зарегистр. 09-02-2011 | Отправлено: 23:39 13-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeyKulikov
Цитата:
Впервые вижу такое: [[:space:]] (надо будет почитать, что это такое)  
такую штуку лично я читаю тут - man tr
Цитата:
man perlopentut
хм у мну такого нету((( только на opennet нашёл...

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 00:14 14-05-2011
SergeyKulikov



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот случайно нашел в интернете: http://rsusu1.rnd.runnet.ru/develop/perl/perlrus/run.html (вдруг кому-то понадобится)

Всего записей: 24 | Зарегистр. 09-02-2011 | Отправлено: 11:35 14-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> хм у мну такого нету
perl-doc не установлен.
 
> вот случайно нашел
Спасибо, прочитаю.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:44 14-05-2011 | Исправлено: ASE_DAG, 14:45 14-05-2011
SergeyKulikov



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А вот эта статья мне понравилась еще больше: http://www.ibm.com/developerworks/ru/library/au-regexp/#list1

Всего записей: 24 | Зарегистр. 09-02-2011 | Отправлено: 23:39 14-05-2011
kostya_rlw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Проверяю поднят ли интерфейс ppp плюс хочу глушить потоки вывода и ошибок, НО:
 
- если ppp0 еще не поднялся то ошибки не подавляются!!
# ifconfig ppp0 | grep "UP" > /dev/null 2>&1
ppp0: error fetching interface information: Device not found
 
- Однако без grep-а все нормально, ошибки подавляются (ppp0 так же еще не существует)  
# ifconfig ppp0 > /dev/null 2>&1
 
С grep-ом не судьба, получается ??

Всего записей: 57 | Зарегистр. 18-01-2006 | Отправлено: 10:32 26-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kostya_rlw
Кручу, верчу, запутать хочу!!!
ifconfig ppp0 2>&1 | grep -i 'UP' > /dev/null
Соответственно дальше можете анализировать переменную $?, если хотите конечно.

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 17:18 26-05-2011 | Исправлено: Alukardd, 17:18 26-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kostya_rlw
> 2>&1
А что такого может подавать ifconfig на STDERR, что это надо грепать?
 
Alukardd
> Соответственно дальше можете анализировать переменную $?
Или сразу:
 
# if ifconfig ppp0 | grep -q 'UP'; then do-smth; fi
 
Добавлено:
Кстати, а разве в выводе ifconfig'а может не быть слова «UP»? Если интерфейс не поднят, то ifconfig по нему вообще ничего не выдаст. Или я неправ?
 
# if ifconfig ppp0 &>/dev/null; then do-smth; fi

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:07 26-05-2011 | Исправлено: ASE_DAG, 19:16 26-05-2011
Alukardd



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

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 22:32 26-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плз, sh скрипт для запуска tcpdump в цикле, который проверяет состояние интерфейса pdp_ip0, и когда тот поднимется, запускает tcpdump.
 
По идее можно использовать вывод ifconfig:
 
pdp_ip0: flags=8010<POINTOPOINT,MULTICAST> mtu 1450
 
и
 
pdp_ip0: flags=8010<UP,POINTOPOINT,MULTICAST> mtu 1450 соответственно.

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 14:11 27-05-2011 | Исправлено: gap5, 14:11 27-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
Вот только что обсудили как проверить включен ли интерфейс или нет. У вас ситуация ни чем не экзотичнее...

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 14:23 27-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а с циклом как быть? у меня опыта маловато в unix shell

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 14:53 27-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
да просто в cron добавьте задачу на каждую минуту(это минимальный интервал для cron'a), например...
Открываете терминал --> пишите crontab -e --> (возможно потребуется указать через что хотите редактировать) --> туда пишите строку - * * * * * /path/to/your/script
В общем-то всё. Путь на свой только поменяйте Скрипту не забудьте дать бит исполняемости - chmod +x /path/to/your/script

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 15:13 27-05-2011 | Исправлено: Alukardd, 15:15 27-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
Не очень уловил, это ведь при старте системы будет выполнятся? Тогда крон ни к чему, лучше действительно условный цикл с некоторой паузой при каждой итерации сделать.
 
Alukardd
Кстати, не знаете хорошего способа инвертировать код возврата? Мне что-то в голову ничего кроме страшной строчки вида:
$ while if sudo ifconfig wlan0 | grep 'UP'; then false; else true; fi; do echo 'DOWN'; done
в голову не приходит.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:41 27-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Речь идет о IOS, там cron'a нет.
Задача разовая, по этому лучше скрипт по необходимости запущенный из шэлла...

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 17:04 27-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Я мысль не понял А зачем sudo? И кстати, если я правильно вас понял - то true и false вы местами перепутали... (Ну и вывод grep'а забыли подавить)
Что вы имеете в виду говоря "инвертировать код возврата"??? В двоичном смысле инвертировать или что? А если 2 вернётся, то его в двоичную систему инвертить и потом обратно?)
 
Добавлено:
gap5
Ну а вам просто цикл тогды, как уже заметили ранее. Можеет использовать конструкцию указанную ASE_DAG, с учетом моих замечаний про true,false ну и если не хотите грузить систему и для вас это не критично, то в тело цикла еще команду добавить - sleep 30; - будет засыпать на 30сек после каждой удачной проверки.
 
Добавлено:
Кстати хотите я вас обрадую - tcpdump, запущенный на работающем интерфейсе не остановится при его отключении, если он конечно совсем не удаляется, а просто переводится в DOWN. Просто в это время пакетов не будет и всё, когда интерфейс поднимется всё встанет на свои места. Сколько он будет ждать упавший интерфейс я хз - но секунд 20 я подождал... Можете проверить - а то вдруг вы тут зря изгаляетесь, да еще и получите через неделю с десяток другой работающий tcpdump'ов.

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 18:31 27-05-2011 | Исправлено: Alukardd, 18:40 27-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
А на какой странице была эта конструкция, что-то не могу найти?
 
Может быть он и 10 минут ждет, но этого не достаточно... по моим наблюдениям, если последняя активность на интерфейсе была в 0:30, то tcpdump отключается где-то в 2:05, а когда именно интерфейс был потушен я сказать не могу...
 
Мне надо разово отловить активность, которая происходит ночью, в промежутке от 2 до 7 часов, в течении ~30-50 секунд.
 
По идее логика работы скрипта такая:
 
0 Ждать 10 секунд
1 Если интерфейс НЕактивен, идти в 0
2 Если запущен tcpdump, идти в 0
3 Запустить tcpdump, идти в 0

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 19:01 27-05-2011 | Исправлено: gap5, 19:10 27-05-2011
Открыть новую тему     Написать ответ в эту тему

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