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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

Открыть новую тему     Написать ответ в эту тему

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
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: ASE_DAG, 22:02 01-03-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
А, это работа меня развращает, в командной строке я всегда знаю с каким данными работаю. А в скриптах пишу побольше защит от дураков и различных пустот, пробелов и так далее. Да, сорян. советовать так не стоит((
 
Добавлено:
Так должно быть норм
while read -r f; do [[ -z $f ]] && continue; echo "f is $f"; done <<<"$(find /tmp/test/ -type f)"

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 23:31 05-02-2017 | Исправлено: Alukardd, 14:45 28-02-2017
shylExSSchumi

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то не соображу, как упросить.
Задача: найти определённые строки в определённом файлике. Файлик лежит где-то глубоко в какой-то подпапке.
 
find ./ -name MyMailService.java | xargs fgrep 'mailService.'

Всего записей: 114 | Зарегистр. 28-03-2016 | Отправлено: 16:30 10-02-2017
Pasha_ZZZ



Gold Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
shylExSSchumi
BASH 4 поддерживает рекурсивный глоббинг, ** (должна быть включена опция globstar)

Всего записей: 5488 | Зарегистр. 11-03-2002 | Отправлено: 16:41 10-02-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shylExSSchumi
Разве что так: find ./ -name MyMailService.java -exec fgrep 'mailService.' "{}" \;

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 16:59 10-02-2017 | Исправлено: Alukardd, 16:59 10-02-2017
shylExSSchumi

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
э мой вариант мне понятней.

Всего записей: 114 | Зарегистр. 28-03-2016 | Отправлено: 18:38 10-02-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shylExSSchumi
Ваш вариант использует не любимый мной xargs, ну тем не менее его всё равно надо приводить в порядок и тогда, возможно, он Вам уже не покажется "более понятным"...
find ./ -name MyMailService.java | xargs -I {} fgrep 'mailService.' "{}"
или так
find ./ -name MyMailService.java -print0 | xargs -0 fgrep 'mailService.'  (в "чистоте" этого варианта я менее уверен)

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 19:07 10-02-2017 | Исправлено: Alukardd, 19:09 10-02-2017
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ> BASH 4 поддерживает рекурсивный глоббинг
 
А ГНУ Греп — рекурсивный обход по шаблону, если уж на то пошло.

----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 05:29 11-02-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Это да, а в сочетании с опцией --include=GLOB он полноценно заменил бы связку find ... grep.

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 05:32 11-02-2017
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопрос по aria2c (сильно не пинайте, форум редиректит в этот топик).
Использую её для загрузки торрентов и есть необходимость добавить руками пира по ip:port. Это как-то возможно сделать? В доках не нашел...

Всего записей: 860 | Зарегистр. 14-07-2008 | Отправлено: 18:26 16-02-2017 | Исправлено: zedxxx, 18:27 16-02-2017
Pasha_ZZZ



Gold Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Наверное подходящий топик... надо сконвертить JSON в строку с разделителями. К примеру такой:
Цитата:
{"name1":111,"name2":[[22,3333,44444,555,6666,"Name3","Name4"],[77,888,9],[0,11,222]]}
в строки надо сконвертировать все вложенные в массив name2 массивы, по отдельности. Т.е. на выходе должно быть
Цитата:
22;3333;44444;555;6666;Name3;Name4
77;888;9
0;11;222
В общем, через jq -c '.name2[]' получается
Цитата:
[22,3333,44444,555,6666,"Name3","Name4"]
[77,888,9]
[0,11,222]
а дальше, если добавить к строке | join(";") - ошибка
Цитата:
jq: error (at <stdin>:24): string ("") and number (22) cannot be added
exit status 5
и как применить tostring не ко всему массиву, а к каждому элементу - не нашел.

Всего записей: 5488 | Зарегистр. 11-03-2002 | Отправлено: 06:48 18-02-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
jq -r '.name2[] | @csv'
Как красиво заменить запятую на точку с запятой что-то не придумалось или туплю
 
Можно так
jq -r '.name2[] | @csv | gsub(",";";")', но если запятая будет внутри значения, то она так же заменится, что плохо...

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 13:13 20-02-2017 | Исправлено: Alukardd, 13:24 20-02-2017
Pasha_ZZZ



Gold Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alukardd
Да я уж разобрался, без костылей и с любым символом:
Цитата:
jq -r '.name2[] | [ .[] | tostring ] | join(";")'

Всего записей: 5488 | Зарегистр. 11-03-2002 | Отправлено: 14:19 20-02-2017 | Исправлено: Pasha_ZZZ, 14:21 20-02-2017
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть небольшой скрипт, ищет в папке в файлах txt и log текст "error"  и выводит содержимое в отдельный файл. Все устраивает за исключением того, что если в файлах строки с "error" нет, то все равно появляется строка "### имя файла". Можно исправить?
 

Код:
 
for i in $(find $DATE_YM/$DATE_YMD/ -type f -name "*.txt" -printf "%f \n" -o -name "*.log" -printf "%f \n"); do
    for k in $(find $DATE_YM/$DATE_YMD/ -type f -name $i); do
    (echo ""; echo "###" $i; gawk "/error/" $k) > $oufile
done
done
 

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 17:18 24-02-2017
Pasha_ZZZ



Gold Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
digital422
Не знаю, что там у вас в файлах, но стоит попробовать grep -lH

Всего записей: 5488 | Зарегистр. 11-03-2002 | Отправлено: 17:36 24-02-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Только вот на этой станице практически идентичную задачу решали
Код:
while read -r f; do
  [[ -z $f ]] && continue
  res=$(grep error "$f")
   [[ -n $res ]] && echo "### $(basename "$f") $res"
done <<<"$(find "$DATE_YM/$DATE_YMD/" -type f -name '*.txt' -o -name '*.log')"


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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 17:45 24-02-2017 | Исправлено: Alukardd, 14:44 28-02-2017
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd, это не совсем моя задача, тем более я при постановке задачи ее немного упростил, у меня в конструкции gawk "/error/" $k параметров на пару строк, идет выборка по времени, чтобы отчеты не повторялись и др., поэтому grep тут не справится. Я думаю не буду трогать тот скрипт, лучше обработать итоговый файл, а выглядит он так:

Код:
 
1.  Когда в файлах нужная строка не найдена
### событие1
 
### событие2
 
### событие3
 
2.  Когда в файлах строка найдена.
### событие1
09:02:47:22:  что-то есть в логах
 
### событие2
10:05:42:22:  что-то есть в логах2

 
Мне надо не выводить в конечный файл то что в п.1.

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 12:30 25-02-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
ну замените grep на awk и всё будет работать, главное что бы awk выдавал вообще пустоту если нету совпадений и не печатал там пустые строки. например. Если там есть пробелы и прочее в случае неудачи, то надо просто изменить проверку $res на то что Вам подойдёт.
Ну либо можно вообще все эти проверки и выводы сделать внутри awk, скажем в блоке END.
 
Тут, так сказать, нету Вашего кода — нету и примеров.

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 13:13 25-02-2017
KrgUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Есть переменные a и b, это наборы строк, и эти наборы отличаются на одну строку, причем эта строка может находиться в любом месте набора. Задача --- выделить как раз эту строку, "вычет"
Работает эта команда
Код:
diff --changed-group-format='%<%>' --unchanged-group-format='' <(echo "$a") <(echo "$b")
но, к сожалению, под MSYS это не подходит
 
Как решить задачу с помощью sed?
 
Спасибо

Всего записей: 51 | Зарегистр. 26-04-2011 | Отправлено: 13:42 08-03-2017 | Исправлено: KrgUser, 13:43 08-03-2017
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KrgUser
> Есть переменные a и b...
 
Не вижу.
 
> не подходит
 
Почему?  Чего не хватает?
 
> Как решить задачу с помощью sed?
 
Перректально.  Откуда такое ограничение на инструмент?
 
Добавлено:
KrgUser, так, ладно, не буду вас ждать:

$ comm -3 <(sort <<< "$a") <(sort <<< "$b")


----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 14:20 08-03-2017
KrgUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
Не вижу
А разве недостаточно сказанного
Цитата:
Есть переменные a и b, это наборы строк

Цитата:
Почему?  Чего не хватает?
Жалоба на то, что каналы (pipes) не реализованы. По этой же причине не будет работать
Цитата:
$ comm -3 <(sort <<< "$a") <(sort <<< "$b")
Подобные вещи уже попробовал
Цитата:
Откуда такое ограничение на инструмент?
Да в общем-то нет ограничения, просто интересно, можно ли таким способом. И, ничего извращенного не вижу в этом
 
Добавлено:
Если совсем уж туго с воображением, вот пример:
a:
qweqw wdw ssacasc
asd xccvdv sdfds
asdas cvcvb dfgfgdhg
123 4554gffdgfe  dgffdgg
 
b:
qweqw wdw ssacasc
asd xccvdv sdfds
assdasd sdfsdf dfgfghfgjh sdfsd
asdas cvcvb dfgfgdhg
123 4554gffdgfe  dgffdgg
 
И уточню еще раз: нужно, чтобы работало под MSYS

Всего записей: 51 | Зарегистр. 26-04-2011 | Отправлено: 15:46 08-03-2017
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru