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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
> хотелось бы сделать копирование аналогичное выньному
Я повторю еще раз.
Копирование, реализованное в WinNT, насколько можно судить, принципиально от реализованного в утилите cp по интересующему вас признаку не отличается — они оба работают со всем диапазоном символов, не деля буквы на верхний и нижний регистр вовсе.
Эквивалентность буквы строчной и заглавной в имени файла определяется драйвером ФС. Можете в этом воочию убедиться: смонтируйте под вашей ГНУ, напр., раздел с FAT32, и попробуйте на него записать два файла, отличающиеся в именах регистром, при помощи cp или любой другой утилиты — у вас не выйдет — это с одной стороны; с другой же — установите в вашей Винде HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitive равным 0, т. е. сделайте ядро NT регистрочувствительным и убедитесь, что альтернативные реализации копирования (Total Commander, напр.) так же изменили свое поведение.
 
> в архиве обновления существует некий бардак, то файло то в одном регистре обозвано может быть, то в другом
Не рассматривая возможности дать втык архивариусу, чтоб навел порядок, наиболее разумным решением вижу предложенное тов. Алукардом — приводить все одному регистру, с одним уточнением — это должно делаться еще до копирования на сервер, на Винде.

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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
смонтируйте под вашей ГНУ, напр., раздел с FAT32, и попробуйте на него записать два файла, отличающиеся в именах регистром, при помощи cp или любой другой утилиты — у вас не выйдет
С чего бы это?) И хотя сейчас у меня есть только NTFS разделы, могу Вас заверить что с ними пркрасно проходит запись двух файлов - aa и AA, более того - Windows 7 их видит оба, однако при попытке открыть любой из них открывается файл в верхнем регистре т.е. AA, как это регулируется я хз. Т.е. видятся оба, а работа идёт только с одним.
 
Добавлено:
Так же могу добавить, что если попытаться прочесть какой-либо из файлов из командной строки (type aa.txt), то команда type читает по сути оба файла с содержимым написанного в верхнем регистре.  Т.е. содержимое выводится два раза.

----------
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 | Отправлено: 17:30 05-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> С чего бы это?
С того, что спецификация FAT32, афайк, предусматривает case-insensitivity. Возможно, вы сочтете забавной ошибку, которую возвращает Баш:
$ ls
$ echo A >> FILE
$ ls
FILE
$ echo a >> file
bash: file: File exists
$ ls
FILE
$ cat FILE
A
$

 
Проверьте, может быть у вас что другое будет, мне было б интересно сравнить. Только не надо говорить, что у вас «сейчас у меня есть только NTFS разделы». Во-первых, не верю, что под рукой у вас ней не единой флэшки с ФАТом. А во-вторых, создать ФС в файле — дело одной минуты.
 
> NTFS разделы, могу Вас заверить что с ними пркрасно проходит запись двух файлов - aa и AA
Могу вас заверить, что и на другие современные ФС: ext*, UFS, UDF и т. д. совершенно спокойно можно записать два файла: aa и AA, только какое имеет отношение к тому, что я сказал?
 
> если попытаться прочесть какой-либо из файлов из командной строки (type aa.txt), то команда type читает по сути оба файла с содержимым написанного в верхнем регистре
Да, любопытная информация.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:00 05-11-2012 | Исправлено: ASE_DAG, 18:07 05-11-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Конечно сочту забавной) У меня он просто запишет указанный текст в тот же файл...
Хотя, если честно, меня сильно удивляет эта ситуация. Мне прекрасно известно о свойствах FAT32, но тем не менее меня это сильно удивляет. NTFS должна так же себя вести но как видите... Собственно всё должно зависеть от драйвера.

----------
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 | Отправлено: 18:43 05-11-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В моём случае на исходной папке фс NTFS (ну это так, к слову). Спасибо за совет по приведению к нижнему регистру, но мне проще убивать ранее скопированное на Линь и затем копирование обновлённого виндового каталога.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 19:59 05-11-2012 | Исправлено: Maximus777, 20:02 05-11-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи, т.к. у меня мозг начинает закипать и думает о задаче в целом, а тут локальная проблема и ни как не могу на неё целиком сосредоточиться.
Косяк идёт с кавычками в bash скрипте.
Скрипт целиком не привожу, только значащие строки:
Код:
FULLNAME="'${OPTARG}'"
ADTOOL userrename $USERNAME $FULLNAME
# И сама функция, создана для разгрузки кода, т.к. таких вызово в нём много.
ADTOOL() {
    adtool -H "$AD_SERVER" -b "$SEARCH_BASE" -D "$AD_ADMIN_USER" -w "$ADMIN_PASSWORD" $*
}
Проблема в том, что строка из OPTARG, например "Ivanov Ivan Ivanovich" превращается в конечном вызове утилиты adtool в ''\''Ivanov' Ivan 'Ivanovich'\'''
Я пробовал различные комбинации двойных и одинарных кавычек, с экранированием и без. Ни черта не выходит.
Нужно что бы вызов шёл с ФИО в любых кавычках.
 
Отказываться от использования $* не хочется ,т.к. эта конструкция серьёзно разгрузила мой код и сделал его читабельным.
Надо понять на каком этапе какие кавычки раскрываются и что в итоге остаётся.
Вывод смотрел через set -x
 
Добавлено:
Сразу добавлю, что не надо мне советовать эту строку вызова сделать без вызова функции ADTOOL, прямым вызовом утилиты adtool. Да, я знаю, что так будет работать.
Меня интересует именно вопрос с кавычками в рамках текущих условий.

----------
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:35 07-11-2012 | Исправлено: Alukardd, 14:42 07-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> у меня мозг начинает закипать
Да, очень похоже, поскольку очень простое правило — все переменные на каждом шаге забирать в кавычки — применимо всегда, но это пол-решения. Вторая половина в том, что от использования $* таки придется отказаться, поскольку правильным тут будет $@.
 
$ USERNAME="Ivanov"
$ OPTARG="Ivanov Ivan Ivanovich"
$ FULLNAME="$OPTARG"
$ ADTOOL() { true "$@"; }
$ set -x
$ ADTOOL userrename "$USERNAME" "$FULLNAME"
+ ADTOOL userrename Ivanov 'Ivanov Ivan Ivanovich'
+ true userrename Ivanov 'Ivanov Ivan Ivanovich'


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:04 07-11-2012 | Исправлено: ASE_DAG, 16:06 07-11-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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 17:06 07-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Всегда пожалуйста. Могу еще пару способов предложить, наверняка вам известных, кстати.
 
Первый — alias.
$ alias ADTOOL='true --key'
$ set -x
$ ADTOOL userrename "$USERNAME" "$FULLNAME"
+ true --key userrename Ivanov 'Ivanov Ivan Ivanovich'

 
Второй — простая переменная.
$ ADTOOL='true --key'
$ $ADTOOL userrename "$USERNAME" "$FULLNAME" # да, именно без кавычек
+ true --key userrename Ivanov 'Ivanov Ivan Ivanovich'

 
Второй к вашему капсовому «ADTOOL» идет куда больше, чем функция и алиас, имена которым принято давать все-таки в нижнем регистре.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:49 07-11-2012 | Исправлено: ASE_DAG, 18:51 07-11-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.

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist (10:35 16-11-2012)
Цитата:
Доброго всем дня, может кто поможет с такой задачкой, есть утилита uniq которая после сортировки убирает или повторяющиеся строки (-u) или неповторяющиеся (-d), а как сделать чтоб вывести именно строки повторяющиеся n раз и более. Т.е. образно говоря мне из отсортированного утилитой sort файла нужно выбрать только те строки которые повторяются более n раз.
Спасибо.

 
 
ASE_DAG (03:59 17-11-2012)
Цитата:
Krist
Во-первых, совершенно излишне было создавать новую ветку, когда можно было обратиться в «UNIX Shell».
 
А по существу могу предложить вот такую строчку:
$ awk -v n=3 '++a[$0]==n' file
— работает без сортировки, но с загрузкой всего файла в память.
 
$ cat file
A
B
C
D
A
D
B
A
A
E
R
A
B
$ awk -v n=3 '++a[$0]==n' file  
A
B

 
Комментарии нужны? Или все понятно?

 
 
Krist (19:25 17-11-2012)
Цитата:
ASE_DAG, спасибо, большое за решение! скорость наманого больше чем мой самописный полускрипт.
 
P.S. честно искал тему, но на эту не обратил внимание, извините.
 
Добавлено:
Может еще кто подскажет, как из текстового файла выбрать и вывести строки с n по k например, пока только через split -l(количество_строк_от_n_до_k), но это костыль, долго потом удалять ненужные части файла.

 
> как из текстового файла выбрать и вывести строки с n по k
$ awk -v n=3 -v k=7 'NR==n, NR==k' file
или
$ n=3 k=7
$ sed -n "${n},${k}p" file

 


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 10:11 18-11-2012
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо за ответ и что перенесли.  Для первой части вопроса нашел потоком решение на основе
 
Цитата:
cat /tmp/bla | uniq -c | grep "6" | sed 's/^\ *6\ //'

 
 не могу только нормальное регулярное выражение подобрать.

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 12:15 18-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> спасибо за ответ и что перенесли
Да не за что.
 
> Для первой части вопроса
Речь о выводе строк, повторяющихся не менее, чем n раз, я так понимаю.
 
> cat /tmp/bla | uniq -c
Надеюсь, вы помните, что uniq работает только с сортированным потоком.
 
> grep "6" | sed 's/^\ *6\ //'
Что, Сед разучился грепать? И почему '6', а не '^\s*6'?
 
$ sort file | uniq --count | sed -n 's/^\s*6\s//p'
— дословно то, что вы хотели написать, но рабочее. Только не надо так делать.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:31 18-11-2012 | Исправлено: ASE_DAG, 14:32 18-11-2012
JekaRus

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как из командной строки обновить данные в таблице mysql
Нужно выполнить такой скрипт UPDATE table set date='%data%';
где %data% это дата завтрашнего дня в формате 2012-11-19
То есть нужно чтоб скрипт к сегодняшней дате прибавлял 1 день

Всего записей: 1046 | Зарегистр. 10-08-2005 | Отправлено: 16:23 18-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JekaRus
$ date -d tomorrow +%Y-%m-%d
2012-11-19


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:29 18-11-2012
JekaRus

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

Всего записей: 1046 | Зарегистр. 10-08-2005 | Отправлено: 01:57 19-11-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 ASE_DAG
Есть какие-то преимущества при передаче параметров в awk:
 
$ awk -v n=3 -v k=7 'NR==n, NR==k' file
 
$ awk 'NR==n, NR==k' n=3 k=7 file

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 19:22 20-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
Простите, я вашего вопроса не понял. Вы спрашиваете о разнице между этими двумя синтаксическими конструкциями?
 
Добавлено:
Если так, то посмотрите 6.1.3.2 Assigning Variables on the Command Line // The GNU Awk User's Guide.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:47 20-11-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Просто интересно, почему Вы используете контрукцию с -v ?
Для наглядности\читабельности, сила привычки либо иная причина?
 
Приведеная ссылка ссылается на Ваш локальный файл.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 23:22 20-11-2012 | Исправлено: kpp77, 23:23 20-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
> ссылка ссылается на Ваш локальный файл
На мой? В /usr/share/ нет моих файлов, у вас точно такой же, если gawk-doc установлен. Ну или найдите онлайновую копию, это элементарно — я же привел название. (P. S. Собственно, вот.)
 
> почему Вы используете контрукцию с -v?
Даже затрудняюсь предположить, каким может ответ на такой вопрос. Давайте сначала вы поясните, почему вы используете иную конструкцию, тогда я, может быть, пойму что отвечать. :-)

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:37 20-11-2012 | Исправлено: ASE_DAG, 23:42 20-11-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