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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cat file | sed 's!11/Feb/2014!12/Mar/2014!g' > new

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 11:45 15-03-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
> sed 's!11/Feb/2014!12/Mar/2014!g' access/file > new/file
УМВР.  
 
$ sed --version
sed (GNU sed) 4.2.2
<...>

 
digital422
Кроме UUCA отличий от исходного не вижу.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:29 15-03-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
У меня по прежнему нету чёткого понимания что делать в различных ситуациях, но всё же накидал пару строк, может Вы их измените под свои нужды...

Код:
#!/usr/bin/gawk -f
 
BEGIN {
    FILE1="/tmp/file1"
    while (getline < FILE1)
        file1_raw[$2]=$0
 
    FILE2="/tmp/file2"
    while (getline < FILE2)
        file2_raw[$2]=$0
 
    for (i in file1_raw)
    {
        printf "%-20s %s\n", file1_raw[i], i in file2_raw ? file2_raw[i] : ""
        delete file2_raw[i]
    }
    for (i in file2_raw)
        printf "%-20s %s\n", "", file2_raw[i]
}
Тут всё просто, читаются 2 файла из каждого из них строится ассоциативный массив с втором столбцом в качестве индекса. Дальше выводятся все элементы файла1 и соответствующие им элементы файла2. После чего выводится остатки файла2.
Я хз в каком порядке вы хотите их видеть, посему оставлю это Вам.
Так же, для красоты дал ширину первому столбцу в 20 символов.

----------
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:28 16-03-2014
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
 
Действительно, всё работает. Спасибо.
Это я ошибся.
Мне надо заменить массив search на массив replace в одном файле. Подскажите, пожалуйста, как это можно сделать в sed'e.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 12:18 17-03-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, ForposT_ForeveR
Можно, пожалуйста, пример? Исходного файла и результата.

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 13:02 17-03-2014
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alex_Piggy
 
Мне нужно заменить в одном файле одни даты на другие.
Например:
"11/Feb/2014" -> "12/Mar/2014"
"09/Feb/2014" -> "15/Mar/2014"
Вот в таком ключе.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 13:13 17-03-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ForposT_ForeveR
Просто составить список замен.

Код:
 
#!/usr/bin/sed -f
s@11/Feb/2014@12/Mar/2014@g
s@09/Feb/2014@15/Mar/2014@g
 

Или, если у Вас файл-массив уже подготовлен (и имеет указанный формат)
sed -e "s/\x22\([^\x22]*\)\x22[^\x22]*\x22\([^\x22]*\)\x22/s@\1@\2@g/g" ARRAYFILE | sed -f - INPUTFILE > OUTPUTFILE
Первый sed переводит файл массив в скрипт sed и передает как скрипт второму.

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 14:28 17-03-2014
digital422

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

Код:
00:10;40001;оригинал
01:00;234;оригинал   01:00:11;234;отчет
01:10;456;оригинал   01:01:11;456;отчет
00:59;12345;оригинал 00:59:21;12345;отчет
00:59;12345;оригинал 00:59:21;12345;отчет
                     01:00:11;234;отчет
                     01:01:11;456;отчет
 

а должно быть:

Код:
00:59;12345;оригинал;00:59:21;12345;отчет
00:59;12345;оригинал;00:59:21;12345;отчет
00:10;40001;оригинал;
01:00;234;оригинал;01:00:11;234;отчет
01:10;456;оригинал;01:01:11;456;отчет
;;01:00:11;234;отчет
;;01:01:11;456;отчет
 

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 18:51 23-03-2014 | Исправлено: digital422, 18:52 23-03-2014
k3NGuru



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Товарищи, подскажите, как сделать такую няшку
 
proxy# cd /tmp/
proxy#
 
Вместо
 
root@exa:/usr/home/zabbix # cd /tmp/
root@exa:/tmp #  
 

Всего записей: 166 | Зарегистр. 07-02-2008 | Отправлено: 12:23 24-03-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Позвольте, файл внутри себя перемешиваться не должен был!
Да есть косяк с тем , что сначала полностью проходит скрипт по file1, а только потом добивает остатки по file2, не обращая внимания на метки времени.
Я собственно и отдал Вам скрипт, что бы Вы подправили его по себя.
 
k3NGuru
Всё просто, если это bash, то открываем файл ~/.bashrc и изменяем переменную PS1 так как Вам угодно, например так:
PS1='\u\$ '

----------
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:08 24-03-2014
yrkrus



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго всем дня, подскажите, а умеет ли sed добавлять пробелы к искомой строке?
например есть строка вида:   Ввод мастер-пароля20140327T11:05:10 необходимо разделить Ввод мастер-пароля и 20140327 и T11:05:10

Всего записей: 379 | Зарегистр. 30-11-2010 | Отправлено: 12:02 28-03-2014 | Исправлено: yrkrus, 12:03 28-03-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, yrkrus
Вариант 1
sed -r -e "s/([^0-9\x20\t:])([0-9])/\1 \2/gi;s/([0-9])([^0-9\x20\t:])/\1 \2/gi"
Вариант 2
sed -r -e "s/^([^0-9]*)([0-9]*)(.*)$/\1 \2 \3/g"

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 14:54 28-03-2014
xqqq

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dig ru-board.com @ru-board.com axfr
 
ответ
 
но!
 
dig ria.ru @ria.ru axfr
 
; <<>> DiG 9.8.1-P1 <<>> ria.ru @ria.ru axfr
;; global options: +cmd
;; connection timed out; no servers could be reached

 
С какими дополнительными ключами запустить, чтобы правильно эксплуатировать багу? На ria.ru она присутствует.

Всего записей: 30 | Зарегистр. 30-05-2012 | Отправлено: 13:07 07-04-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xqqq
 
> dig ria.ru @ria.ru axfr
> @ria.ru
 
В зоне ria.ru нет нэймсерверов, сравните:
$ dig ru-board.com ns +short
ns1.ru-board.com.
ns2.ru-board.com.

$ dig ria.ru ns +short
ns3.rian.ru.
ns8-cloud.nic.ru.
ns2.rian.ru.
ns8-l2.nic.ru.
ns4-cloud.nic.ru.
ns4-l2.nic.ru.

 
Запрашивать NS из nic.ru бесполезно, они информацию стерегут:
$ dig ria.ru @ns8-cloud.nic.ru axfr +short
; Transfer failed.

 
А вот из rian.ru можно:
$ dig ria.ru @ns3.rian.ru axfr
тыц

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 01:15 08-04-2014 | Исправлено: ASE_DAG, 01:15 08-04-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
м-м-м axfr голой ж*пой наружу. Занимательно...

----------
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 | Отправлено: 12:33 08-04-2014
Maximus777

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

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



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

----------
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:01 09-04-2014
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А Hostname и не нужен. Нужны данные только с первого столбца.
С портами да, засада. Ни wget, ни httrack не дали мне полной инфы.
Тогда можно реализовать полуавтоматический вариант. Т.е. открываем сайт браузером, копируем данные таблицы, сохраняем в файл. И этот файл уже обрабатываем. Получается, что надо отловить данные в каждой строке, между первым и вторым пробелом.

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
Я вчера скачивал и парсил страницу через ruby nokogiri, но так же с ним упёрся в JS.
 
Для браузера есть плагины, которые сохраняют таблицу в csv формате. Когда найдёте удобный Вам, покажите выходной формат, и дальше на том же 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.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 11:09 10-04-2014
yrkrus



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alex_Piggy
благодарю за ответ, но вот еще одна проблемка:
так же через sed сделать подстановку слова в конец строки, имея регулярное выражение
 
например тело:
 4:55:49 НЕКОРРЕКТНОЕ - время события 05:01:26
в нужно что бы было так
4:55:49 НЕКОРРЕКТНОЕ - время события 05:01:26 ТУТ ПОДСТАВЛЕННОЕ СЛОВО
 
т.е. ищем регулярное выражение НЕКОРРЕКТНОЕ, в случае если его находим, подставляем в конец данной найденой строки "ТУТ ПОДСТАВЛЕННОЕ СЛОВО".
 

Всего записей: 379 | Зарегистр. 30-11-2010 | Отправлено: 14:58 10-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