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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zsh# touch {1..10}
zsh# zmv "(*)" "aa-\$( date +'%Y%m%d-%N' ).txt"
zsh# ls -1
aa-20130409-119571751.txt
aa-20130409-121800874.txt
aa-20130409-123726700.txt
aa-20130409-125835951.txt
aa-20130409-128066683.txt
aa-20130409-130134027.txt
aa-20130409-132075220.txt
aa-20130409-133586661.txt
aa-20130409-134413058.txt
aa-20130409-135238314.txt
zsh#

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 08:38 09-04-2013
urodliv



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Спасибо. Уникальность обеспечил простым методом: первоначально сгенерировал на основе наносекунд число, а потом к каждому файлу просто добавлял константу. То же самое можно было бы провернуть и с другими функциями.
arto
Да, этот модуль безусловно мощный, но условие таково: доставлять что-либо в в систему нельзя. Посему приходится башить.

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6689 | Зарегистр. 29-04-2009 | Отправлено: 18:56 09-04-2013
urodliv



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то я опять застопорился с башем на мелочи.
Есть файл:

Код:
user@comp:~$ ls -l Лабу\ да/Doc\ -\ 2013\ 04-09.pdf  
-rw-r--r-- 1 user user 0 Апр  9 21:25 Лабу да/Doc - 2013 04-09.pdf

И содержимое файла для его преобразования (в середине стоит табуляция):

Код:
user@comp:~$ cat files  
Лабу\ да/Doc\ -\ 2013\ 04-09.pdf          Лабу\ да/Doc-09.pdf

В командной строке запускаем: IFS='\n'; cp -T $(cat files)
И в ответ получаем:

Цитата:
cp: неверный ключ -- \
Попробуйте `cp --help' для получения более подробного описания.

При этом если в командной сроке введу команду cp -T Лабу\ да/Doc\ -\ 2013\ 04-09.pdf          Лабу\ да/Doc-09.pdf баш не чихает, а всё исполняет.
Чегось он хотит?

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6689 | Зарегистр. 29-04-2009 | Отправлено: 22:16 09-04-2013 | Исправлено: urodliv, 22:24 09-04-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
Ну можно смотреть что реально пытается выполнить команда в скрипте включив показ собственно команд на экран. set -x, вернуть обратно set +x. Писать именно в скрипте, если всё это скрипт, конечно...
 
Во вторых менять разделитель на символ новой строки надо так: IFS=$'\n'

----------
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 | Отправлено: 22:52 09-04-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго всем дня, как перевести все в lowercase средствами bash через awk понятно, может кто подскажет, если такое возможно, как в тексте в котором встречаются слова только заглавными перевести эти слова в формат чтоб только первая буква была заглавная.

Цитата:
Lorem ipsum dolor sit AMET, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim VENIAM, quis nostrud exercitation ULLAMCO  laboris nisi ut aliquip ex ea commodo consequat.


Цитата:
Lorem ipsum dolor sit Amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim Veniam, quis nostrud exercitation Ullamco  laboris nisi ut aliquip ex ea commodo consequat.

 

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 11:57 02-05-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, Krist
Попробуйте (тратит примерно 4 с на 30 Mb текста)
sed -e "s/[A-Z]+/\L\u\0\E/g"
 
Lowercase на sed (Тот же файл - 6 с. Интересно, из-за чего).
sed -e "s/[A-Z]/\l\0/g"

Всего записей: 1889 | Зарегистр. 07-08-2002 | Отправлено: 16:14 02-05-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
> sed
Вопрос т-ща Krist’а был про средства Баша.
 
> Тот же файл - 6 с. Интересно, из-за чего
Почему дольше? Ну, наверное, потому, что в отличие от первой она что-то делает.
 
$ sed -e "s/[A-Z]+/\L\u\0\E/g" file
Lorem ipsum dolor sit AMET, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim VENIAM, quis nostrud exercitation ULLAMCO  laboris nisi ut aliquip ex ea commodo consequat.
 
$ sed --version
GNU sed version 4.2.1
<...>

 
 
 
Krist
> как перевести все в lowercase средствами bash
$ cat file
Lorem ipsum dolor sit AMET, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim VENIAM, quis nostrud exercitation ULLAMCO  laboris nisi ut aliquip ex ea commodo consequat.
 
$ while read; echo "${REPLY,,}"; done < file
lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

 
Не?
 
> если такое возможно, как в тексте в котором встречаются слова только заглавными перевести эти слова в формат чтоб только первая буква была заглавная
Почему может быть невозможно? Баш полноценный язык. Но столь же простого оператора для этого нет.  
 
Добавлено:
Ну вот так, например, может это выглядеть.
 
$
while read; do
    set $REPLY
    for w; do
        W_1="${w:0:1}"
        W_R="${w:1}"
        echo -n "${W_1}${W_R,,} "
    done  
    echo
done < file
Lorem ipsum dolor sit Amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim Veniam, quis nostrud exercitation Ullamco laboris nisi ut aliquip ex ea commodo consequat.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:59 02-05-2013 | Исправлено: ASE_DAG, 18:06 02-05-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый вечер, ASE_DAG
Прошу прощения. Убрал "-r", не заменив "+" на "\+". Да, теперь ожидаемо работает 7 секунд.
sed -e "s/[A-Z]\+/\L\u\0\E/g"
sed -r -e "s/[A-Z]+/\L\u\0\E/g"  
Подробнее...

Цитата:
Вопрос т-ща Krist’а был про средства Баша.

К сожалению, я этого не понял. Думал что речь идет про стандартные средства системы. (Неправильно расшифровал "как перевести все в lowercase средствами bash через awk понятно")

Всего записей: 1889 | Зарегистр. 07-08-2002 | Отправлено: 18:33 02-05-2013 | Исправлено: Alex_Piggy, 18:37 02-05-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
> Неправильно расшифровал "как перевести все в lowercase средствами bash через awk понятно"
Да не обязательно, может быть и я неправильно понял, что там пытался спросить т. Крист; пусть он лучше сам повнятнее скажет, что имел в виду.
 
> $ sed -r -e 's/[A-Z]+/\L\u\0\E/g' file
А вообще, меня всегда восхищают решения на Седе и те, кто умеет их писать, а еще более те, кто умеет их читать. :-)

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:15 02-05-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вообще это будет часть скрипта bash, извиняюсь, что некорректно поставил вопрос, в принципе оба варианта просто отличные и как говорится главное что работают. Кроме того  соглашусь, не то что писать, а читать sed для меня сложно, надо лезть в мануалы.
 
Большое спасибо!

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 21:28 02-05-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> в принципе оба варианта просто отличные
Так чем вас АВК-то тогда не устроил?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:33 02-05-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да устроил только не мог до конца адаптировать однострочник на awk для "капитализации", сейчас в приниципе уже и его доделал )

Код:
 
Admin@microsof-582458 /home
$ cat input
Lorem ipsum dolor sit AMET, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim VENIAM, quis nostrud exercitation ULLAMCO  laboris nisi ut aliquip ex ea commodo consequat.
 
Admin@microsof-582458 /home
$ awk '{for(i=1;i<=NF;i++) {if (match($i, /[A-Z]+/)) {$i=toupper(substr($i,1,1)) tolower(substr($i,2))}} print $0}' input
Lorem ipsum dolor sit Amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim Veniam, quis nostrud exercitation Ullamco laboris nisi ut aliquip ex ea commodo consequat.
 

 
awk все таки попроще sed(a)

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 11:37 03-05-2013 | Исправлено: Krist, 11:41 03-05-2013
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
# print -l test TEST teST TEst | awk '{for(i=1;i<=NF;i++) {if (match($i, /[A-Z]+/)) {$i=toupper(substr($i,1,1)) tolower(substr($i,2))}} print $0}'
test
Test
Test
Test
#

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 13:23 03-05-2013
galleon2005



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, не могу разобраться.
Нужно преобразовать строку с текстом в число.
Например,  из первоначального выражения - "145.4 TB" мне нужно получить просто "145.4"

Всего записей: 219 | Зарегистр. 08-03-2006 | Отправлено: 14:53 05-05-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
galleon2005
> Нужно преобразовать строку с текстом в число.  
Если речь о типизации переменных, то в Баше нет числовых типов.
 
> из первоначального выражения - "145.4 TB" мне нужно получить просто "145.4"
Если речь просто о разборе строки, то не понимаю проблемы.
$ read VALUE UNIT <<< "145.4 TB"
$ echo $VALUE
145.4



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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:57 05-05-2013
galleon2005



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Извиняюсь, мне это нужно для обработки snmp ответа от устройства в Zabbix.
Zabbix запущен на сервере с freebsd.
 
Например, для значения "1.46 TB" я выполняю команду:
snmpwalk -c public -v2c 192.168.67.10 .1.3.6.1.4.1.24681.1.2.17.1.5.1 | sed 's/[^0-9]*//g'
 
но в результате, я не могу получить значение "1.46"

Всего записей: 219 | Зарегистр. 08-03-2006 | Отправлено: 15:18 05-05-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
galleon2005
У меня нет под рукой Zabbix’а, чтоб видеть, что он возвращает.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:23 05-05-2013 | Исправлено: ASE_DAG, 15:27 05-05-2013
galleon2005



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Здесь дело даже не в Zabbix, до него не доходит.
Сначала, с помощью команды snmpwalk, я получаю значение какого-либо параметра  (напр. "1.46 TB" ).
Потом нужно обработать это значение  с помощью sed, для получения только цифр ( 1.46 )  
И только потом скормить это значение Zabbix.

Всего записей: 219 | Зарегистр. 08-03-2006 | Отправлено: 15:33 05-05-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, galleon2005
sed -e "s/^\([0-9.,]*\).*/\1/"
Или ?
sed -e "s/^\([0-9.,]*\)[^0-9.,].*/\1/"

Всего записей: 1889 | Зарегистр. 07-08-2002 | Отправлено: 15:52 05-05-2013 | Исправлено: Alex_Piggy, 16:00 05-05-2013
galleon2005



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

Всего записей: 219 | Зарегистр. 08-03-2006 | Отправлено: 16:29 05-05-2013
Открыть новую тему     Написать ответ в эту тему

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