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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
> Приведите пример на основе предложенной строки, пожалуйста.
 
Вот это вы имеете в виду?

$ cat dvk54
#!/usr/bin/gawk -E
 
{
    gsub ("123", "012");
    gsub ("456", "789");
    print;
}
 
$ ./dvk54 <<< 'aaa 123 bbb 456 ccc'
aaa 012 bbb 789 ccc

> просто не понимаю - как надо писать в файле с программой
 
Пардон, а вы не пытались изучить язык прежде, чем на нем начинать писать?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 03:50 27-11-2016 | Исправлено: ASE_DAG, 03:57 27-11-2016
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
dvk54
Цитата:
а вы не пытались изучить язык прежде, чем на нем начинать писать?
У нас так было в универе. Сначала лабораторная, на которой надо было что-то делать, а потом - самая первая лекция в принципе по предмету...
Самое интересное даже не в начале написания без знания языка, а в его выборе без этого знания...

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 05:58 27-11-2016
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG, ещё раз - СПАСИБО! Это то, что надо.

Цитата:
а вы не пытались изучить язык

Ребята, пытался!
Но - цейтнот.
Я не студент, и область профессиональная далека от.
Параллельно "изучаются" С, Perl, php, mysql - а годы уже не молодые, мозги не те.
Если, благодаря наличию примеров, "hello world" на gcc (демон: сокеты, потоки, sql) вполне работоспособна, то в случае с awk - нужных примеров не нашлось.
Я уже и так и так крутил, но НЕ ПОНИМАЮ, почему выводится строка 3 раза!
В сях понятно: блок выполняется последовательно и всё. Надо ветвление - на тебе if,case. А тут - не доходит до меня..
 

Цитата:
а в его выборе без этого знания...

совершенно точно!
Сначала вообще хотел на перле писать, но вспомнил что никсах весьма мощные утилиты. Возможно, на чём-то это проще сделать, но я этого просто не знаю.  
сорри за оффтопик.

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 09:02 27-11-2016 | Исправлено: dvk54, 09:02 27-11-2016
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dvk54
Может в вашей задаче вообще sed'ом обойтись?

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 10:57 27-11-2016
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
У меня недостаточно обширные знания о никсовом инструментарии, чтобы определиться.
Задача такая:  
Приходит большой файл с хаотично вкраплёнными \n \t  и пробелами.
Сначала сбивается в одну строку пробелы приводятся к нормальному виду (не более одного за раз) -  tr
Потом производится полтора десятка замен (gawk gsub).
Потом перлом парсится и пишется в БД.  
 
gawk для замены был выбран по производительности - попалась заметка с измерениями awk,perl и sed.
awk лидировал с большим отрывом.
 
Upd: Когда всё заработает - не исключено, что буду переписывать всё сразу на сях - если будет слишком медленно. Хотя работа со строками в С меня убивает. Что такое указатель я полностью осознаю, но выражение "указатель на указатель" уже вызывает kernel panic..

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 11:30 27-11-2016 | Исправлено: dvk54, 11:35 27-11-2016
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dvk54
Цитата:
Сначала сбивается в одну строку пробелы приводятся к нормальному виду (не более одного за раз)
Это что-то типа
Цитата:
tr -s '\n\t' ' '
а потом какие замены?

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 12:28 27-11-2016
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
угу,
-s "\t"," "  
-s "\r\n\","\n"
.. и т.д. и т.п.
а потом замены вида
(от "утра" до "вечера") заменить "8 часов пахали"
вася заменить петя
ломал - демонтировал
и т.п.
киррилица - это только для примера, так-то latin
 
уже 47 замен и это ещё не конец
 
У меня по gsub awk вот ещё какой вопрос:
конструкция [^abc] исключает символы из СПИСКА a,b,c
а можно исключить СТРОКУ?
т.е. предположим на входе racb 1cde dcfgh
надо что-то типа gsub("a[^'cd']+", "Ф")
чтобы на выходе получилось rФcde dcfgh

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 13:04 27-11-2016 | Исправлено: dvk54, 13:49 27-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
>> а вы не пытались изучить язык прежде, чем на нем начинать писать?
> У нас так было в универе. Сначала лабораторная, на которой надо было что-то делать, а потом - самая первая лекция в принципе по предмету.
 
И что, за лабораторную принимались не читая методичку?
 
dvk54
> СПАСИБО!
 
Да не за что...
 
>> а вы не пытались изучить язык
> Ребята, пытался!
> Но - цейтнот.  
> Я уже и так и так крутил, но НЕ ПОНИМАЮ, почему выводится строка 3 раза!
> В сях понятно: блок выполняется последовательно и всё. Надо ветвление - на тебе if,case. А тут - не доходит до меня.
 
Смею вас заверить, что вы уже&#769; потратили больше времени на попытки «дойти» опытным, исследовательским, путем до умолчаний, принятых в АВКе, чем понадобилось бы для того, чтоб просто прочитать хотя бы обзорную часть прилагаемой к программе инструкцию.  Ну которая (info "(gawk) Getting Started").
 
Pasha_ZZZ
> Может в вашей задаче вообще sed'ом обойтись?
 
Вы товарищу решили совсем мозги сломать?  :-)
 
dvk54
> Приходит большой файл с хаотично вкраплёнными \n \t и пробелами.
> Сначала сбивается в одну строку пробелы приводятся к нормальному виду (не более одного за раз) — tr
> Потом производится полтора десятка замен (gawk gsub).
> Потом перлом парсится и пишется в БД.
 
tr, gawk, perl — да, вот только Седа здесь еще не хватает.
 
dvk54
> конструкция [^abc] исключает символы из СПИСКА a,b,c
> а можно исключить СТРОКУ?
 
Очевидно, что [^a][^b][^c].
 
> т.е. предположим на входе racb 1cde dcfgh
> чтобы на выходе получилось rФcde dcfgh
 
Не понял, ни как это связно со «строкой», ни что это вообще за наборы бессвязных букв.  Но тем не менее, очевидная связь между ними такова:

$ gawk 'gsub (/r.*cd/, "rФcd")' <<< 'racb 1cde dcfgh'
rФcde dcfgh


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:31 27-11-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
> конструкция [^abc] исключает символы из СПИСКА a,b,c
> а можно исключить СТРОКУ?
 
Очевидно, что [^a][^b][^c].  
Очевидно, что нет: echo awbc | grep -P '[^a][^b][^c]'

----------
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 | Отправлено: 12:28 28-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd> Очевидно, что нет: echo awbc | grep -P '[^a][^b][^c]'
 
Честно говоря, я не понял возражения.

$ awk 'gsub ("foo[^a][^b][^c]", "X")' <<< 'foobar fooabr foobca foobac'
X fooabr X foobac

Что, разумеется, не отменяет того, что товарищу Двк-54 это, по всей видимости, не нужно.  Но тут как спрошено, так и отвечено.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:04 28-11-2016 | Исправлено: ASE_DAG, 16:20 28-11-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Я вопрос понял так, что символы не должны идти подряд, т.е. реализуется это if'ом, как мне видится.
awk 'BEGIN{RS=" "} /abc/{print; next} gsub("foo[^ ]*", "X")' <<< 'fooabc fooawbc foobac'

----------
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:50 28-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd> Я вопрос понял так...
 
Наверное, вы правы.  Я-то не понял, чего товарищу Двк-54 на самом деле надо (кроме краткого учебника по АВКу :-).
 
Кстати, у меня появилось подозрение, что масса народу не подозревает, что помимо всякой сторонней литературы (ссылки на которую накиданы в шапке) у каждой хорошей программы есть еще и *приложенное руководство*.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:12 28-11-2016
kaktusgarden2014

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день! Подскажите пожалуйста, никак не могу разобраться.
Ubuntu Mate 15. Есть скрипт. start.sh

Код:
 
#!/bin/bash
echo "Начинаю монтирование"
mount //192.168.1.5/shara /home/user/shara -rw -o username=user,password=1
echo "Монтирование выполнено"
 

 
Задача. Добавить данный скрипт в автозагрузку после reboot. Увидеть результат выполнения, а именно echo в терминале.
Как я это вижу. Загружается система, открывается терминал, в нем выполняется скрипт от root, после чего я вижу результаты echo.
Если добавить скрипт в Startup Applications, то он запускается, но с правами обычного пользователя.
Если добавить в rc.local, то он выполняется, от root, но результата выполнения я не вижу.
В crontab так же как и в rc.local.
 
 

Всего записей: 10 | Зарегистр. 01-10-2014 | Отправлено: 15:01 05-12-2016 | Исправлено: kaktusgarden2014, 15:02 05-12-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kaktusgarden2014
1. Зачем скрипт? https://wiki.ubuntu.com/MountWindowsSharesPermanently
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 | Отправлено: 16:15 05-12-2016
kaktusgarden2014

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd

Цитата:
2. Зачем вывод на экран, когда этот самый вывод "улетает", в т.ч. и при показе приглашения для входа?

Нужен вывод, так как это только малая часть скрипта.
Там с десяток условий, нужно смотреть какие, что возвращаю... Выполнено, нет и с каким значением.
Есть условие, при котором происходит  

Код:
ifconfig $WIFI_IFACE down && sleep 10 && ifconfig $WIFI_IFACE up && echo "$(date +"%Y.%m.%d %T") WiFi-Interface перезагружен " >> "$local_log/$log_file"

Его нужно выполнить от root, и видеть результат именно в терминале.

Всего записей: 10 | Зарегистр. 01-10-2014 | Отправлено: 16:32 05-12-2016 | Исправлено: kaktusgarden2014, 16:33 05-12-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kaktusgarden2014
Ну ок, скрипт, так скрипт.
Вызвать его же тогда лучше не из rc.local, а написать systemd unit ( у Вас же там systemd? ).
Цитата:
echo hello_journal
echo hello_console > /dev/console
Как-то так должно быть.

----------
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 | Отправлено: 16:44 05-12-2016
kaktusgarden2014

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd

Цитата:
Вызвать его же тогда лучше не из rc.local, а написать systemd unit ( у Вас же там systemd? ).

Я не большой эксперт. Что Вы имеете ввиду под  systemd unit?

Всего записей: 10 | Зарегистр. 01-10-2014 | Отправлено: 17:26 05-12-2016 | Исправлено: kaktusgarden2014, 17:26 05-12-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kaktusgarden2014
Цитата:
Что Вы имеете ввиду под  systemd unit?  
Эм.
systemd.unit(5) (man 5 systemd.unit)
А ещё, иногда стоит спрашивать google.
 
Добавлено:
kaktusgarden2014
Вообще это обсуждение скорее для Новичковой темы, чем для темы по скриптам.
И да. Вы можете использовать rc.local, он вызывается для совместимости, я просто показал Вам что если у Вас система с systemd, то будет правильнее использовать его.

----------
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:39 05-12-2016 | Исправлено: Alukardd, 22:31 05-12-2016
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, что надо прописать в NR, чтобы вместо 132 выводилась фактическая строка, найденная по условию $3 >= now ? Без NR выводятся все строки, а мне нужна только первая.
$3 >= now && NR==132 {}

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Я не понял что Вам надо.
NR == 132, значит что условие будет истино только для 132 строки.
Предположу, что хотите Вы что-то такое: awk '$3 >= now {print; exit}'

----------
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 | Отправлено: 21:52 07-12-2016 | Исправлено: Alukardd, 21:52 07-12-2016
Открыть новую тему     Написать ответ в эту тему

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