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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
Что мешает поставить пакет gawk-doc и посмотреть что в файле?
И если уже догадались что за файл, то можно и в инете глянуть.
 
Добавлено:
ну раз ни кто не решился ответить, а я хочу спать то скажу с точки зрения сырого man'а: объясвлять переменные с ключом -v в самом начале намного лучшая привычка, т.к. в таком случае переменная будет доступна всегда в теле программы.

----------
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 | Отправлено: 23:40 20-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Да, но конкретно в данном случае, может быть и более уместно было бы передавать переменные позиционными параметрами, поскольку они тогда относились бы к следующему за ними файлу, что, во-первых, логично — мне нужны строки 3—7 именно этого файла, а не какого-то иного, а во-вторых позволяет выбрать разные строки из нескольких файлов, буде понадобится:
$ awk 'NR==n, NR==k' n=3 k=7 first-file n=10 k=12 second-file n=1 k=5 third-file

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Если указана ссылка, по ней должен быть осуществлен переход.
Но указанная ссылка не сработает(как у меня: во FreeBSD и Debian работаю через консоль), если система как минимум не *никсовая.
Просто можно было указать путь без ссылки.
 
По поводу использования конструкции с передачей параметров - просто было интересно.
И на сколько знаю не все варинты awk "понимают" опцию -v (источник: Unix инструментальные средства Лукидис).

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
win32gui (12:40 21-11-2012)
Цитата:
Добрый день господа,  
 
Суть проблемы: Имею огромный текстовый фаил размером 11 гигабайт, информация в нём важная. Фаил получен объединением кучи текстовых файлов с различными кодировками (не досмотрели в своё время), посему на выхлопе имеем крякозяблы.
 
Мне тут подсказали про построчное чтение и перевод в другую кодировку программой enca и пишем в новый фаил, но как написать рабочий скрипт ума не хватает...
 
Или же ещё есть какие варианты по приведению текстового файла в единую кодировку ?

 
> про построчное чтение и перевод в другую кодировку программой enca
Каждую строку гонять на предмет определения исходной кодировки? 11 Гб? Может все-таки найдется разделитель, отсекающий куски в одной кодировке покрупнее? Как минимум двойным переводом строки исходные файлы при слиянии же разделялись?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:51 23-11-2012
win32gui

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну у вас и хочу спросить оптимальный вариант

Всего записей: 4 | Зарегистр. 21-11-2012 | Отправлено: 01:19 23-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
win32gui
Оптимальный вариант чего? Хранения текстовых данных? Ну уж точно не в виде одного одиннадцатигигабайтного файла.  
Только вам-то надо разбираться с тем, что есть, а не искать «оптимальный вариант». А что уж у вас там, я не знаю, это вы рассказывайте.
 
P. S. А запускать эвристическое определение кодировки на каждой строке не только долго, но и чревато ошибками — чем больше материала для обработки, тем, очевидно, точнее определение.

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
win32gui
Сколько разновидностей кодировок в файле?
Мне видится один вариант: просмотреть файл вручную, определенным образом отмечая\отделяя блоки текста в разных кодировках.
Затем можно автоматизировать.

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи у меня какой-то нах происходит.
Не выполняется команда в скрипте:
# sed -i s/100/137/g /etc/pve/qemu-server/137.conf
sed: preserving permissions for `/etc/pve/qemu-server/sedTZE3dX': Function not implemented

 
Права у меня рутовые, как видно. Если выполнить эту команду на копию файла в домашнем каталоге, то всё работает нормально. Что такого в этом каталоге?
# ls -la /etc/pve/qemu-server/
total 4
drwxr-x--- 2 root www-data   0 Nov 19 17:21 .
drwxr-x--- 2 root www-data   0 Nov 19 17:21 ..
-rw-r----- 1 root www-data 274 Nov 21 15:59 100.conf
. . .
-rw-r----- 1 root www-data 274 Nov 23 15:01 137.conf
-rw-r----- 1 root www-data 388 Nov 23 13:31 201.conf

 
Добавлено:
Нет, у меня не Win32 среда, в которой я видел схожие ошибке на форумах. Всё происходит на почти обычном Debian Squeeze.
 
Добавлено:
Хрень! А ещё тут не отрабатывает команда stat:
# stat --printf='%m\n' /etc/pve/qemu-server/137.conf  
?

 
Ядро тут "особое":
# uname -a
Linux testlab 2.6.32-16-pve #1 SMP Fri Nov 9 11:42:51 CET 2012 x86_64 GNU/Linux


----------
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 | Отправлено: 15:05 23-11-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Навскидку.
Ключ -i указывает на перезапись исходного файла, для выполнения операции sed пытается создать временный файл sedTZE3dX, а создать\записать в него не может в этом каталоге.
Не может установить права доступа к файлу.
а если попробовать :

Код:
sed s/100/137/g /etc/pve/qemu-server/137.conf > /etc/pve/qemu-server/137.conf_

 
Кстати почти на всех BSD системах ключа -i вообще нет (т.е. нет возможности изменять тотже файл). Приходится делать через явный промежуточный файл.

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
Капитан?
 
Вопрос в том, какого хрена?!
 
Добавлено:
Пока обнаружил следующее:
# mount
/dev/fuse on /etc/pve type fuse (rw,nosuid,nodev,default_permissions,allow_other)

Монтируется хз кем и как, но походу это делает скрипт /etc/init.d/pve-cluster вызовом утилиты pmxcfs.
 
Добавлено:
У-у-у... Не в ЭТО я лезть не хочу, поэтому просто обошёл этот косяк в несколько команд:
    cp "${configdir}${src}.conf" "/tmp/${dst}.conf"
    sed -i 's/'${src}'/'${dst}'/g' "/tmp/${dst}.conf"
    cp "/tmp/${dst}.conf" "${configdir}${dst}.conf"
    rm -f "/tmp/${dst}.conf"

 
По факту, я понял что они в своей Proxmox Cluster FS просто не реализовали часть команд, в том числе все команды связанные со сменой владельца.

----------
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 | Отправлено: 15:29 23-11-2012 | Исправлено: Alukardd, 16:49 23-11-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может тогда:

Код:
sed 's/'${src}'/'${dst}'/g' "${configdir}${src}.conf" > "/tmp/${dst}.conf"
cp "/tmp/${dst}.conf" "${configdir}${dst}.conf"  
rm -f "/tmp/${dst}.conf"

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 16:49 23-11-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
Да это уже не важно Ну да, на строку короче и на несколько команд быстрее с точки зрения системы.

----------
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:04 23-11-2012
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток, господа.  
Может кто подскажет, есть набор команд
Код:
 cut -d "|" -f 7 logs.csv | grep -E '503\sService\sUnavailable|protocol\sunknown\sat\score' | read var;  php -r "echo urlencode($var);" > result
Как правильно декодировать полученные строки, совсем запутался.

Код:
http://www.xxx.com&q=%22http%3A%2F%2Fxxx.net%2F - 503 Service Unavailable

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 11:01 24-11-2012 | Исправлено: Krist, 12:29 24-11-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> Как правильно декодировать полученные строки
Если вы кодировали при помощи PHP, то почему бы и не декодировать с его же помощью? Функция urldecode().
 
> http://www.xxx.com
Хм. Хороший ресурс. :-)

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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хехе ххх.com это так пример )
я понимаю чем декодировать и php -r "echo urlencode();" декодирует но только одну строчку, а в поток как встроить, у меня не получается ... не могу строчку переменной передать, читал мануалы по разному пробовал но что-то видно я пропустил

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> php -r "echo urlencode();" декодирует но только одну строчку
urlencode() не декодирует, а кодирует.
 
Т. е. вам надо применить percent-encoding к stdin и выдать stdout? Так бы и спрашивали.  
 
Я не знаком с php в роли интерпретатора inline-скриптов, поэтому могу предложить только perl.
 
$ echo 'One. Two.' | perl -nl -MURI::Escape -e 'print uri_escape($_);'
One.%20Two.

 
Ну и в вашем конкретном случае, если вы уж привлекли Перл, то cut c grep’ом уже не нужны.
 
$ perl -nla -F'/\s*\|\s*/' -MURI::Escape -e 'print uri_escape($F[6]) if /503\sService\sUnavailable|protocol\sunknown\sat\score/;' < logs.csv > result
 
> ххх.com это так пример
https://tools.ietf.org/html/rfc2606#section-3

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:44 24-11-2012 | Исправлено: ASE_DAG, 15:51 24-11-2012
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
весьм благодарен, все работает, спасибо!
про ехаmple.com понял, исправлюсь.

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 16:06 24-11-2012 | Исправлено: Krist, 16:07 24-11-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Давно мучаюсь вопросом:
как в SH стандартными средствами (системы BSD) правильно преобразовывать строку символов в их 16-тиричные коды и наоборот?
На данный момент делаю через цикл, в цикле
Код:
awk '{printf "%c", $1}'


Код:
#awk --version
awk version 20091126 (FreeBSD)

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 13:02 27-11-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
Есть стандартная BSD'овая утилита hexdump.
Так же есть утилита xxd — это уже кажется от vim'а подарок.
% xxd -p <<< "Some text"                    
536f6d6520746578740a
% xxd -r <<< "0x536f6d6520746578740a"
Some text


----------
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:26 27-11-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
xxd, похоже делает то, что нужно, но его нет как и vim-а.
Как сделать тоже с помощью hexdump пока не уразумел, на первый взгляд эта утилита для несколько других целей...

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 15:03 27-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