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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422, да блин.  Отфильтровываете (как лишнее) вы что?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:16 24-11-2016
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Где-то снова напутал. Надо при текущей дате заставить срабатывать $3 > nowtime, а если дата не совпадает, то $3 > nowtime не нужен.
 

Код:
 
BEGIN {
    RS="\n";
    FS=";";
    OFS=";";
    nowtime = strftime ("%H:%M");
    nowdate = strftime ("%d.%m.%Y");
}
 
# ======================= date ===================
NR == 2 {
match ($1, /([.0-9]+)/, s);
split(s[1], a,".");
"date '+%d.%m.%Y' -d "a[3]"-"a[2]"-"a[1]"" | getline newdate
dt=newdate
}
# ================================================
 
# дата совпала, проверяем по времени
/[[:digit:]]{6,9}/ && dt == nowdate && $3 > nowtime {
print (dt "\t" $3);
}
 
#дата не совпала, выводим все.
/[[:digit:]]{6,9}/ {
print (dt "\t" $3);
}
 

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 21:30 24-11-2016
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго.
Прошу помощи в разборе вложенных блоков.
 
На входе строка вида "aaaa{bbbb{cccc}eeee}fffff gg{hhh{ci}kkkkk}".  
Уровни вложенности не лимитированы.
sed, awk, grep.
 
Как заменить {cccc} и {ci} на <lim>?
пробовал так:

Код:
 
# echo "aaaa{bbbb{cccc}eeee}fffff gg{hhh{ci}kkkkk}" ; echo "aaaa{bbbb{cccc}eeee}fffff gg{hhh{ci}kkkkk}" | gawk '{gsub("{c[^{]+}", "<lim>", $0); print }'
#aaaa{bbbb{cccc}eeee}fffff gg{hhh{ci}kkkkk}
#aaaa{bbbb<lim>fffff gg{hhh<lim>
 

т.е. нормально заменяется только 1 блок и в конце кусок, но не верно (так понимаю, срабатывает "greedy")
никак не могу найти решение.  
 

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 22:15 24-11-2016 | Исправлено: dvk54, 22:19 24-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54> Как заменить {cccc} и {ci} на <lim>?
 
Таки так:
 
$ gawk 'gsub (/{cccc}|{ci}/, "<lim>")' <<< "aaaa{bbbb{cccc}eeee}fffff gg{hhh{ci}kkkkk}"
aaaa{bbbb<lim>eeee}fffff gg{hhh<lim>kkkkk}

 
:-)
 
В смысле, доформулируйте задачу.
 
Добавлено:
А что до вашего примера, то в нем просто опечатка:

gawk '{gsub("{c[^{]+}", "<lim>", $0); print }'
                 ^

 
Должно быть, очевидно:
 

gawk '{gsub("{c[^}]+}", "<lim>", $0); print }'
                 ^



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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня там ДВЕ опечатки...
там ещё "с" лишняя.

gawk '{gsub("{[^}]+}", "<lim>", $0); print }'
              ^

 
Пример переделывал - форум на квадратные скобки ругается что тэг не закрыт.
Задача - замена ВНУТРЕННИХ вложенных блоков неким текстом. Поиск по скобкам.
 
т.е. если на входе:
aaaa{bbbb{cccc}eeee}fffff gg{h{hh{dsdsci}kkk}kk}lalala
и строка замены "<stop>",
то на выходе должно быть:
aaaa{bbbb<stop>eeee}fffff gg{h{hh<stop>kkk}kk}lalala
 

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

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

Всего записей: 1567 | Зарегистр. 04-09-2015 | Отправлено: 23:56 24-11-2016 | Исправлено: alex52mail, 02:20 26-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
> Задача - замена ВНУТРЕННИХ вложенных блоков неким текстом. Поиск по скобкам.  
 
Ну, я вижу, вы ее решили.
 
> Пример переделывал - форум на квадратные скобки ругается что тэг не закрыт.
 
Да в большинстве случаев на ругань местного недопарсера можно плевать.   А когда нельзя, то можно помимо [font=monospace][/font] образцы еще и в [no][/no] забирать.
 



alex52mail, что-то вы не по адресу.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:22 25-11-2016
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На мой предыдущий вопрос про /[[:digit:]]{6,9}/ && dt == nowdate && $3 > nowtime никто  не ответил и хорошо, в этом случае как раз нужен if, вроде получилось.
 
Есть второй вопрос: что надо в find прописать чтобы найти файлы по маске даты (dd.mm.yyyy) за текущий день и файлы с масками даты будущих дней ?
date -d before (1..30) - некрасиво
find -type f -name "*.*.*.txt" -printf "%f\n"

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 17:35 25-11-2016
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
 
 
Ну, я вижу, вы ее решили.  

К сожалению, нет.
echo "aaaa{bbbb{cccc}eeee}fffff gg{h{hh{dsdsci}kkk}kk}lalala " | gawk '{gsub("{[^}]+}", "<lim>", $0); print }'
 
на выходе:
aaaa<lim>eeee}fffff gg<lim>kkk}kk}lalala
а должно быть:
aaaa{bbbb<lim>eeee}fffff gg{h{hh[b]<lim>[/b]kkk}kk}lalala  

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 20:23 25-11-2016 | Исправлено: dvk54, 20:26 25-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54, а, извините.  Обе скобки же должны быть:
 
$ gawk 'gsub (/{[^{}]+}/, "<lim>")' <<< 'aaaa{bbbb{cccc}eeee}fffff gg{h{hh{dsdsci}kkk}kk}lalala'
aaaa{bbbb<lim>eeee}fffff gg{h{hh<lim>kkk}kk}lalala


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

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



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Недавно обнаружил, что aria2 не хочет принимать данные из stdin под linux. Под виндой работает, а под сабжем - No files to download. Даже простейшее
Цитата:
echo 'http://url/'|aria2c -i -

Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 23:33 25-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ> под Linux
 
Решительно не готов поверить, что здесь что-то может зависеть от ядра.  Однако именно на нем УМВР.
 
Debian GNU/Linux Jessie, aria2c 1.18.8

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:42 25-11-2016
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
aria2 version 1.27.1
Linux 4.4.32-rc1 #1580 Mon Nov 14 11:06:03 CET 2016 armv7l DD-WRT
Другие хавают stdin без проблем (wget, grep, sed и т.п.)
 
Добавлено:
ASE_DAG
Цитата:
не готов поверить, что здесь что-то может зависеть от ядра
Кстати, как-то открывал тикет даже на такой же случай с виндой (только с виндой) - в следующей версии исправили.

Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 23:56 25-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ> aria2 version 1.27.1
 
А все равно УМВР.

$ /opt/aria2-1.27/bin/aria2c -i - <<< 'http://ya.ru'
 
11/26 02:42:34 [NOTICE] Downloading 1 item(s)
 
11/26 02:42:34 [NOTICE] Download complete: /tmp/index.html
 
Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
9ffac4|OK  |   839KiB/s|/tmp/index.html
 
Status Legend:
(OK):download completed.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 02:42 26-11-2016
Pasha_ZZZ



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

Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 02:49 26-11-2016
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
А можно еще поинтересоваться, у вас х86 или х64?
Цитата:
Debian GNU/Linux Jessie
Просто вроде как проверили, на х64 говорят не работает и на armv7. А на x86 и armv5, например, работает...
А еще на mipsel не работает тоже
 
Добавлено:
ASE_DAG
Все-таки это был косячок-с...
https://github.com/aria2/aria2/issues/785

Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 14:16 26-11-2016 | Исправлено: Pasha_ZZZ, 14:23 26-11-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ, amd64.  Ну и славно, что баг нашли и решили.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:33 26-11-2016
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG, спасибо!
 
теперь ещё вопрос по gawk :
не могу понять его идеологию..
пытаюсь перенести последовательную обработку строк в файл, но что-то не понял, и не получается.
вот так оно работает правильно:

Код:
echo "aaa 123 bbb 456 ccc" | gawk '{gsub("123","012");print}' | gawk '{gsub("456","789");print}'
aaa 012 bbb 789 ccc
 

пишу файл 1.g:

Код:
 
BEGIN {
gsub("123","012")
gsub("456","789")
}
END{}
 

запускаю: echo "aaa 123 bbb 456 ccc" | gawk -f 1.g
и ничего не получается. (echo тут для проверки, так-то файл на входе)
смысл: Надо для каждой строки файла произвести несколько замен.
Пробовал по разному, но чего-то главного я не догнал..  с gawk только-только познакомился. интернет читал - не помогло..

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54> спасибо
 
Да на здоровье.
 
> не могу понять его идеологию
 
Идеологию языка?  Вы еще скажите «философию»...
 
> и ничего не получается
 
А что должно получится, если вы ничего не выводите?


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:31 27-11-2016 | Исправлено: ASE_DAG, 00:33 27-11-2016
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
добавил в файл {print $0}
- вывело  
aaa 012 bbb 456 ccc
aaa 012 bbb 789 ccc
aaa 012 bbb 789 ccc
 
Я действительно просто не понимаю - как надо писать в файле с программой.
Приведите пример на основе предложенной строки, пожалуйста.

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 01:27 27-11-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

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