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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
Десятичный разделитель — свойство локали, т.е. определяется переменной LC_NUMERIC (или более широко — LC_ALL; причем LC_ALL приоритетней). Точка — дес. разделитель, в частности, в позиксной локали (C). Т.о.
$ LC_NUMERIC=C
$ printf "%02d:%02d:%06.3f\n" 30 30 300  
30:30:300.000

 
P. S. Вам это, если не секрет, зачем?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:21 19-01-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ух ты! Работает! Вообще-то это не мне, на kubuntu.ru задали вопрос, а мне интересно стало найти решение. Спасибо огромное. Я догадывался, что как-то так, глобально должно решаться, но с наскока решение не нашёл.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 23:25 19-01-2012 | Исправлено: Maximus777, 23:30 19-01-2012
o_l_i_ve_r_89

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В програме написаной на С# использую подключение по SSH к серверу, при выполнении функции: RunCommand(tcpdump -s 0 host IPadress -w file.cap &), программа дальше не выполняется, а зависает та как ждет пока нажмется Enter. Подскажите пожалуйста кто что знает по этому поводу.........

Всего записей: 2 | Зарегистр. 20-01-2012 | Отправлено: 16:58 20-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
o_l_i_ve_r_89
А причем тут вопрос в этой теме? Это вопрос по шарпам, по функции RunCommand...
tcpdump кроме параметров ни чего не требует. Кстати я не припомню, что бы хоть где-то он у меня запустился без указанного интерфейса (-i eth0, например).

----------
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:56 21-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Что-то пропустил Ваш ответ.
Да на работе надо было (больше для моего извращения).
Буду посвободнее опробую! СПС.

----------
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:23 25-01-2012
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробовал написать awk скрипт. Работает, но кажется мне, что это тааакой костыль. Может посоветует кто более изящное решение?
 
Есть здоровый файл, автоматом пересылаемый свитчами по почте. Выглядит так:

Цитата:
Ports aktiv      :  16           (ifAdmin: up    ifOper: up)   ==> 33 percent used
-----------------------------------------------------------------------------------------
Device           :  rzsw2k157-l.rz.dom.dd.com
Ports admin down :  0            (ifAdmin: down)
Ports inaktiv    :  36           (ifAdmin: up    ifOper: down) ==> 75 percent unused
 
Ports aktiv      :  12           (ifAdmin: up    ifOper: up)   ==> 25 percent used
 
Host                                 Index  Bezeichnung/Kommentar                                    Admin Oper
===============================================================================================================
 
Begin device :   6.216.138.132 rzsw140.rz.finanzit.sko.de
rzsw140.rz.dom.dd.com.........  10129  GigabitEthernet1/0/1 ### to sw177 gig 0/44 OE42x Him_Te  up..  up..
rzsw140.rz.dom.dd.com.........  10130  GigabitEthernet1/0/2...................................  down  down
rzsw140.rz.dom.dd.com.........  10131  GigabitEthernet1/0/3...................................  down  down
rzsw140.rz.dom.dd.com.........  10132  GigabitEthernet1/0/4...................................  down  down
rzsw140.rz.dom.dd.com.........  10133  GigabitEthernet1/0/5 ### to rzswh1320 gig 1/0/24 - 6.21  up..  up..
rzsw140.rz.dom.dd.com.........  10134  GigabitEthernet1/0/6...................................  up..  up..
Begin device :   6.218.119.240 v-encl11-swb.mgmt.finanzit.sko.de
v-encl11-swb.mgm.dom.dd.com..  1....  port1..................................................  up..  up..
v-encl11-swb.mgm.dom.dd.com..  2....  port2..................................................  up..  up..
v-encl11-swb.mgm.dom.dd.com..  3....  port3..................................................  up..  up..
v-encl11-swb.mgm.dom.dd.com..  4....  port4..................................................  up..  up..
v-encl11-swb.mgm.dom.dd.com..  5....  port5..................................................  up..  down
rzsw140.rz.dom.dd.com.........  10149  GigabitEthernet1/0/21 ### RZ2-RZ1 Port-Channel 1 ###...  down  down
rzsw140.rz.dom.dd.com.........  10150  GigabitEthernet1/0/22 ### RZ2-RZ1 Port-Channel 1 ###...  down  down
rzsw140.rz.dom.dd.com.........  10151  GigabitEthernet1/0/23 ### to rzsw2k157-f gig 1/0/4 ###.  down  down
rzsw140.rz.dom.dd.com.........  10152  GigabitEthernet1/0/24 to rzsw2k157-a gig 0/46..........  down  down
 
 

 
Нужно привести это хозяйство к excel-угодному стилю для импорта. Такого вида (Servername Port(s) Status):

Цитата:
rzsw140.rz.dom.dd.com 1/0/24 down  down
v-encl11-swb.dom.dd.com 5 up down

 
Я написал вот такую змею:
Сперва удаляю точки, одиночные не трогаем, а потом идет сортировка и раздел по столбцам.
 
Код:
awk '/^rzsw/{feld1=$1; gsub("[.][.]+","",feld1); feld3=$3; gsub("[A-Za-z]+","",feld3); gsub("[.][.]+","",feld3); feld4=$(NF-1);gsub("[.][.]+","",feld4); feld5=$NF;gsub("[.][.]+","",feld5); printf("%28s\t%4s\t%4s %4s\n",feld1,feld3,feld4,feld5)}' inputfile

 

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 15:55 03-02-2012 | Исправлено: CrownRU, 15:58 03-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
Если хотите в Excel удобоваримый то лучше в csv с разделителем ";". Так что вот как это выглядит:
Код:
#!/usr/bin/gawk -f
/^rzsw/{
    gsub(/\.*[\t ]|\.*$/," ");
    gsub(/[[:alpha:]]/,"",$3);
    print $1";"$3";"$(NF-1)";"$NF;
}
/^v-enc/{
    gsub(/\.*[\t ]|\.*$/," ");
    print $1";"$2";"$(NF-1)";"$NF;
}


----------
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 | Отправлено: 16:23 03-02-2012
CrownRU



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

Код:
gsub(/\.*[\t ]|\.*$/," ");  
-вот тут только не совсем понял - удаляем точки вместе с табами и точки? Почему тогда одиночные остаются? С sed я так написал
Код:
sed "s/\.\{2,\}//g"
, а тут чегой-то недопер...

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 17:00 03-02-2012 | Исправлено: CrownRU, 17:45 03-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRUКстати лучше так написать
Цитата:
gsub(/\.+[\t ]+|\.+$/," ");

да и тут не красиво вышло( я не смог в [] поместить $
А читается это просто: во всей строке находим последовательность точек от одной и более после которой есть хотя бы один таб или пробел и заменяем всё это добро на один единственный пробел (нужен для дальнейшей работы скрипта)
 
Добавлено:
А пиво завози
Я в Питере живу
 
p.s. а по элегантности у нас тут есть специалист - т. ASE_DAG.

----------
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:52 03-02-2012 | Исправлено: Alukardd, 17:56 03-02-2012
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Т.е. по идее можно заменить на
Код:
gsub(/\.*[:blank:]/," ")
?

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 18:04 03-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
да, только используйте второй вариант (gsub(/\.+[[:blank:]]+|\.+$/," "); ), он более точный.

----------
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:32 03-02-2012
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет, надеюсь, в правильную тему пишу.
Вкратце, давно использую скрипт для переноса mysql базы данных с одного хоста на другой, доступ к серверу одного из них есть с другого.
Собственно скрипт

Код:
BACKUPFILE=/home/путь_к_дампу_бд/dumps/db_`date "+%y%m%d_%H%M"`.sql.gz
mysqldump -u user1 -ppassword1 dbase1 -h host1 | gzip > ${BACKUPFILE}
/bin/gunzip < ${BACKUPFILE} | /usr/bin/mysql -u user2 -ppassword2 dbase2 -h host2
a=$(ls -ltr /home/путь_к_дампу_бд/dumps|wc -l);cd /home/путь_к_дампу_бд/dumps; rm $(ls -rt1 .|head -$(($a-4)))
 

Последняя строка тут не так важна, просто удаляю лишние дампы, оставляя только 3 последние.
 
Для определенных целей в большинстве случаев меня все устраивает.
Вот только понадобилось в одном конкретном случае перед восстановлением базы внести в нее некоторые изменения, а именно найти все вхождения одной строки и всё заменить на другую.
Все таки тут не очень силен, смог дотумкать только с вариантом без сжатия, и то возможно что несколько коряво....

Код:
BACKUPFILE=/home/путь_к_дампу_бд/dumps/db_`date "+%y%m%d_%H%M"`.sql
mysqldump -u user1 -ppassword1 dbase1 -h host1 > ${BACKUPFILE}
find /home/путь_к_дампу_бд/dumps -name "*.sql" -print0 | xargs -0 sed -i -e "s/archive\/index.html/http:\/\/mydomain.com\/archive\/index.html/g"
/usr/bin/mysql -u user2 -ppassword2 dbase2 -h host2 < ${BACKUPFILE}
a=$(ls -ltr /home/путь_к_дампу_бд/dumps|wc -l);cd /home/путь_к_дампу_бд/dumps; rm $(ls -rt1 .|head -$(($a-4)))
 

т.е. заменяю все строки archive/index.html на http://mydomain.com/archive/index.html
 
В общем, тут не очень нравится, во-первых, что дампы сохраняются без сжатия, а как осуществить поиск "на лету", что то не пойму, т.е. сначала осуществить поиск с заменой, после замены упаковать и далее по плану.
И во-вторых, после осуществления замены, несмотря на внешнюю видимость того, что сайт и бд в полном порядке, при попытке просмотреть изменения с phpmyadmin, начинает  из этого  phpmyadmin выбрасывать, с надписью, что время сессии истекло, хотя конечно же это не так..И эти выбросы только при попытке редактирования той таблицы и того конкретного поля, где были эти изменения...Т.е. ощущения, что все таки что то нарушается при такой замене, либо это почему то глючит phpmyadmin....

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 21:54 08-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
Я плохо с mysql знаком - дамп внутри архива будет одним sql файлом? Если да, то такой файл можно обработать не распаковывая вручную. Вот команда
Код:
vim -c '%s/archiev\/index\.html/http:\/\/mydomain.com\/archiev\/index.html\//g' -c 'wq!' ${BACKUPFILE}
слава великому ViM'у.
 
Если внутри архива много файлов, то ViM его не съест. В таком случае проводите все действия с несжатой копией - какая вам-то разница? И после импорта дампа уже сжимайте - результат тотже - работать даже будет быстрее чем ваш первый вариант - вы там впустую пережимаете 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.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 00:09 09-02-2012
Weinaum



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

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 02:59 09-02-2012
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Все работает, спасибо, и проблемы, связанной с phpmyadmin вроде как нет вовсе...
пс. только в моем случае после последнего html слеш не нужен, а перед первым, вроде как точку экранировать не надо - ни в коем случае не претензии, больше скорее для себя пометил, чтобы если что найти и не забыть )))))

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 14:37 09-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
в первой секции (там где описываете ЧТО заменять) всегда лучше экранировать точки, т.к. в противном случае точка будет рассмотрена как "любой символ".
про слэш - да эт я случайно)
 
p.s. так я не понял - а где "Слава великому ViM!!!"??? Отдельное сообщение для этого писать не надо

----------
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 | Отправлено: 21:05 09-02-2012
Weinaum



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

Цитата:
в первой секции (там где описываете ЧТО заменять) всегда лучше экранировать точки, т.к. в противном случае точка будет рассмотрена как "любой символ".  

понял, буду знать, спасибо

Цитата:
p.s. так я не понял - а где "Слава великому ViM!!!"??? Отдельное сообщение для этого писать не надо

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

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 23:34 09-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
Цитата:
только начал знакомств
Для начинающего есть на мой взгляд очень хорошая книга.
Ну и темой на нашем любимом форуме ViM не обделён.

----------
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 | Отправлено: 23:56 09-02-2012
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
for /f "delims=" %%e in ('wget -q ^"http://rutracker.org/forum/viewtopic.php^?t^=3908777^" -O -^| awk -v RS^="\r\n" -v ORS^=" " "{print( $0 );}"') do echo %%e
 
Это винда, направляю выход wget

Код:
wget -q "http://rutracker.org/forum/viewtopic.php?t=3908777"

на awk, чтоб он склеил в одну строку всю страницу,

Код:
awk -v RS="\r\n" -v ORS=" " "{print( $0 );}"

 но он не клеит, выдаёт по строчкам, что не так?

Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 12:55 10-02-2012
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, king_stiven
По строчкам разбивает уже echo.
Т.е при Вашей конструкции правильнее будет не (echo %%e), а (set "text=!text!%%e"). Разумеется с setlocal enabledelayedexpansion
П.С А из-за чего Вы не можете обработать после закачки? Нужно именно по строкам? (проверить не могу)
wget  "http://rutracker.org/forum/viewtopic.php?t=3908777" | awk -v RS="\r\n" -v ORS=" " "{print( $0 );}"

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 13:42 10-02-2012 | Исправлено: Alex_Piggy, 13:43 10-02-2012
Открыть новую тему     Написать ответ в эту тему

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