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

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

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

Цитата:
потому что спрашивать тоже надо уметь.

Можно использовать букву "s" и "$var". Остальное нельзя, цифру "1" нельзя.

Цитата:
var=${s1}


Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:14 28-09-2019
zertyuiop



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто поможет. Занялся научными расчетами и решил использовать для этих целей облако с Linux. Встала такая задача: в директории находится несколько поддиректорий с input-файлами, и, возможно, результатами расчетов (файл .frd). Требуется при запуске компьютера просканировать директории на наличие файла расчетов (.frd) и, если он отсутствует, запустить процесс-солвер, а потом постпроцессор, при этом количество одновременных расчетов не может превышать определенное количество (это зависит от количества ядер, обычно количество ядер - 1). По мере надобности могут добавляться дополнительные директории с input-файлами, их тоже надо сканировать. По окончании всех расчетов необходимо отключить машину. При этом, если при запуске несделанных расчетов не найдено, необходимо просто завершить скрипт. Я в скриптах новичок, поэтому не знаю, как подобное можно реализовать.

Всего записей: 349 | Зарегистр. 25-08-2012 | Отправлено: 22:31 28-09-2019
karavan



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

Цитата:
Можно использовать букву "s" и "$var". Остальное нельзя, цифру "1" нельзя.

Попробуйте сформулировать задачу в полном объеме, ограничьте мою фантазию.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 00:39 29-09-2019
king_stiven

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

Цитата:
Попробуйте сформулировать задачу в полном объеме, ограничьте мою фантазию.

 
var=$$var  
 
Двойное разименование переменной нужно.

Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 07:04 29-09-2019
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот, Alex_Piggy мне подсказал:
 
echo $(eval echo "\$s$var")
или
ref=s$var
echo ${!ref}

Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 23:44 02-10-2019
MihailM



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

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 01:20 03-10-2019 | Исправлено: MihailM, 12:57 03-10-2019
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM
Батник? - спрашивать сюда.
 
Если нет, то так:

Цитата:
каким знаком в пути заменить пробелы в батнике
Взять в кавычки точно так, как сделал в сообщении:
Цитата:
"каталог один"  

Код:
$ mkdir "Folder one"
$ cd "Folder one"
$ pwd
/tmp/Folder one


Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 01:32 03-10-2019 | Исправлено: karavan, 01:34 03-10-2019
MihailM



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan, соррь и вправду перепутал темы, как так %)))
p.s.  а я там и ищу своё сообщение ))  

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 12:57 03-10-2019 | Исправлено: MihailM, 13:22 03-10-2019
VecH



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
подскажите пожалуйста как качать в curl эти линки с сохранением имени при скачивании
"https://download.mozilla.org/?product=firefox-esr-latest&os=win&lang=ru"
 
 
при скачивании через wget проблем нет:

Код:
wget --no-check-certificate --content-disposition "https://download.mozilla.org/?product=firefox-esr-latest&os=win&lang=ru"

А в curl скачивает html файлик, редирект не перхватывает
 
ps.
Код:
curl -V
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL

Всего записей: 2445 | Зарегистр. 18-02-2003 | Отправлено: 11:09 26-10-2019 | Исправлено: VecH, 12:53 26-10-2019
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VecH
Должно бы было сработать curl -JOL, но нет, он не работает для данной ссылки.
Потому что ключ -J полагается только на заголовок Content-Disposition. Почему этот ключ помогает wget'у я не могу сказать, исходя из man'а тоже не должен бы.
А ключ -O с какого-то перепуга работает именно для той ссылке что Вы скормили curl'у. И 302 redirect его уже не волнует.
 
Если очень хочется то можно это скриптануть с curl'ом, но чисто опциями это на данный момент не сделать. Для меня это тоже стало сюрпризом.

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 14:09 26-10-2019 | Исправлено: Alukardd, 14:33 26-10-2019
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
VecH
Самый простой вариант, который у меня получился для curl, но не для windows:

Код:
curl -so- "https://download.mozilla.org/?product=firefox-esr-latest&os=win&lang=ru" | cut -d'"' -f2 | xargs curl -sO

Как верно заметил Alukardd, отсутствие заголовка Content-Disposition напрягает.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 15:23 26-10-2019
VecH



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Для меня это тоже было неожиданностью, проще завернуть это в WSL

Всего записей: 2445 | Зарегистр. 18-02-2003 | Отправлено: 20:20 26-10-2019
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех.
Затупил на следующей задаче. Если не сложно, помогите.
 
Есть один огромный бинарный файл. В нем, помимо прочего мусора напихано куча PDF файлов.
Задача - вытащить эти файлы. Т.е. разделить файл на количество PDF и сохранить их.
 
Там есть стринги типа:
 
Начало PDF:
 

Код:
klejfjkhg|kgpgjue984876t8><F8>llfkgj%PDF-1.4

 
Конец PDF

Код:
 
%%EOF

 
В итоге, я думал, надо выделить все, что стоит между %PDF и следующим %PDF, обрезать все, что стоит перед %PDF (ну или наоборот) и перенаправить каждый PDF в отдельный файл.
 
Заранее спасибо!

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 19:51 07-11-2019 | Исправлено: CrownRU, 19:52 07-11-2019
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
мб имеет смысл смонтировать файл как loop девайс и прогнать по нему scalpel, выбрав в конфиге pdf?

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 21:18 07-11-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, CrownRU
Попробуйте  

Код:
awk 'BEGIN{RS="%PDF-";FS="%%EOF";}{print RS $1 FS > "out" NR-1 ".pdf";}' input.dat

UPD: Похоже не годиться... Слишком много памяти требует ~ 5 x input.dat

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 21:23 07-11-2019 | Исправлено: Alex_Piggy, 21:29 07-11-2019
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо камрады!
Кажись сам домучал.
Вот так заработало.
 
Делим файл

Код:
csplit FILE /%PDF/ {*}  

 
Стираем в стринге все слева от %PDF
perl надо использовать, потому как окаянный sed не работает с бинарными файлами.

Код:
perl -pi -e 's/^.*%PDF/%PDF/' xx*

 
Прибавляем pdf расширение.

Код:
find . -name "xx*" -exec mv {}{,.pdf} \;

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 21:46 07-11-2019 | Исправлено: CrownRU, 22:05 07-11-2019
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как в awk split выдать все результирующие сразу, а не по одной ?
Код:
echo 'abc=123&cde=456&fgh=789'|awk '{split($0,a,"&"); a[1]}'
Пробовал a[0], но это похоже не то. Подозреваю, как-то через for внутри awk, но для меня это пока слишком сильное колдунство

Всего записей: 2080 | Зарегистр. 19-09-2011 | Отправлено: 19:23 09-11-2019 | Исправлено: Baltazar500, 19:23 09-11-2019
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
Цитата:
Подозреваю, как-то через for внутри awk, но для меня это пока слишком сильное колдунство
это же простой вопрос для гугла, не требующий какой-то специфики Вашего вопроса...
Код:
echo 'abc=123&cde=456&fgh=789'| awk '{split($0, a, "&"); for (k in a) print a[k]}'

,но конкретно этот пример, лучше записать по другому
Код:
echo 'abc=123&cde=456&fgh=789'| awk -F'&' '{for (i=1;i<=NF;i++) print $i}'
или даже так
Код:
echo 'abc=123&cde=456&fgh=789'| awk 'BEGIN{RS="&"} 1'

предпочтительный вариант из этих трёх зависит от того что ещё вы собираетесь делать в данной программе.

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 20:19 09-11-2019 | Исправлено: Alukardd, 20:35 09-11-2019
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd,
Цитата:
это же простой вопрос для гугла, не требующий какой-то специфики Вашего вопроса...
ну я хз Гугл по запросу
Цитата:
awk split print all outputs
выдавал много примеров, но похожего на мой не было. Либо был, но я ввиду небольшого опыта работы с awk не нашёл необходимого.
Цитата:
предпочтительный вариант из этих трёх зависит от того что ещё вы собираетесь делать в данной программе.
Ну вариантов тут 2 - один grep'ать нужный результат, а второй - пускать в awk второй круг обработки с разделителем "=".
 
А в чём отличия между этими примерами ?
 
p.s. Спасибо. С awk приходится отдельно от баша разбираться, т.к. это язык в языке Зато он в отличии от прочих тулз позволяет намного шире манипулировать текстом

Всего записей: 2080 | Зарегистр. 19-09-2011 | Отправлено: 00:15 10-11-2019 | Исправлено: Baltazar500, 00:23 10-11-2019
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
Цитата:
Ну вариантов тут 2 - один grep'ать нужный результат, а второй - пускать в awk второй круг обработки с разделителем "=".
эм, всё надо делать за один проход awk, если опишите, то смогу помочь
 
p.s. я последнее время всё чаще использую perl, вместо 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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 13:35 10-11-2019
Открыть новую тему     Написать ответ в эту тему

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