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

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

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

 

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

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aequit
Чёт как-то у вас сложно выглядит, на всякий случай накидал пример того что у меня было, просто докинув доп проверки и аргумент с точностью:
Код:
function round() {
    local f=${1-}
    local p=${2-}
    : "${p:=0}"
 
    if [[ $f =~ ^-?[0-9]+\.([0-9]+)$ ]]; then
        [[ ${#BASH_REMATCH[1]} -gt $p ]] && f="${f}1"
    elif [[ $f =~ ^[0-9]+$ ]]; then
        :
    else
        echo "Wrong value: '$f'" >&2
        return 1
    fi
 
    if ! [[ $p =~ ^[0-9]+$ ]]; then
        echo "Wrong precision: '$p'" >&2
        return 1
    fi
 
    LC_ALL=C printf "%.${p}f\n" "$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.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 22:50 08-08-2023 | Исправлено: Alukardd, 17:10 09-08-2023
los

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

Цитата:
C_ALL=C printf "%.${p}f\n" "$f"

не 'LC_ALL=C' ?

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 10:03 09-08-2023
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
так конечно LC должно быть, где-то потерялось при копированиях
а в моей локали и так всё корректно работает, потому и не видел

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 17:10 09-08-2023 | Исправлено: Alukardd, 17:12 09-08-2023
aequit

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd Спасибо.
Проверил, работает как нужно. Интересный вариант, хоть и задачу решил другим путём, полезно будет разобрать и проанализировать код.

Всего записей: 192 | Зарегистр. 17-11-2005 | Отправлено: 22:05 09-08-2023
LunaChee

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




Спам

Всего записей: 1 | Зарегистр. 02-10-2023 | Отправлено: 18:48 02-10-2023
Denis_Kokyev



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот 2 команды подряд отрабатывают то, что мне надо:
sed -i "/%channel%$/{n;d;}" %file%
sed -i "/%channel%$/a %group%" %file%
 
Но очень хотелось бы для удобства в одну строчку это представить:
 
sed -i -e "/%channel%$/{n;d;}" -e "/%channel%$ /a %group%" %file%
 
Первая часть отрабатывается, вторая нет. Почему так?
 

Всего записей: 1074 | Зарегистр. 24-02-2003 | Отправлено: 20:32 03-10-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Denis_Kokyev
"/%channel%$/{n;s/.*/%group%/}"

Всего записей: 15117 | Зарегистр. 20-09-2014 | Отправлено: 08:10 04-10-2023
Denis_Kokyev



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
Спасибо, то что надо!
 
А можно с помощью sed:
Найти post="что угодно" и заменить на post="worker"
если нет вхождения - вставить post="worker" после слов list of people:

Всего записей: 1074 | Зарегистр. 24-02-2003 | Отправлено: 10:19 04-10-2023 | Исправлено: Denis_Kokyev, 16:45 04-10-2023
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Denis_Kokyev
Цитата:
А можно с помощью sed:
Найти post="что угодно" и заменить на post="worker"
если нет вхождения - вставить post="worker" после слов list of people:  
sed -E 's/post="[^"]*"/post="worker"/; t; s/list of people:/& post="worker"/'

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 22:24 05-10-2023 | Исправлено: Alukardd, 22:25 05-10-2023
Denis_Kokyev



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ещё такой вопрос родился.
Читая маны и форумы увидел одну функцию grep, которая мнеб очень пригодилась.
А именно - возможность брать шаблоны из текстового файла.
Попробовал так:
grep -f  pattern.txt txt_in.txt > txt_out.txt
Работает. Но мнеб надо, чтоб выводилась ещё одна строчка после совпадения, но не понял, как это сделать и в гугле найти ответ так и не смог.
Хотелось бы, чтоб это работало под виндой, потому как я в прошлом своем вопросе это не учёл и воспользоваться выше описанной командой, ввиду сочетания кавычек так и не смог.

Всего записей: 1074 | Зарегистр. 24-02-2003 | Отправлено: 17:59 11-10-2023
mithridat1



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

Цитата:
надо, чтоб выводилась ещё одна строчка после совпадения

-A, --after-context=NUM   print NUM lines of trailing context

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 19:02 11-10-2023
Denis_Kokyev



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

Цитата:
mithridat1

Это я в курсе. Но задействовать из шаблона в файле не могу.
Если я подставляю A1 или A 1 в любое место команды grep -f -A1 pattern.txt 111.m3u > 222.m3u получаю ошибку grep: -A1: No such file or directory

Всего записей: 1074 | Зарегистр. 24-02-2003 | Отправлено: 19:10 11-10-2023 | Исправлено: Denis_Kokyev, 19:16 11-10-2023
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Denis_Kokyev
А если так
 
grep -A 1 -f pattern.txt 111.m3u > 222.m3u
 
Если паттерн в строке задать то работает ?

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 19:37 11-10-2023 | Исправлено: mithridat1, 19:39 11-10-2023
Denis_Kokyev



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

Цитата:
 то работает ?

Так - заработало! Спасибо большое! Как то странно - гонял A1 по всей строке - не срабатывало, скопировал Вашу строку - сработало!
 
Добавлено:
Жаль только, что работает это не так как задумано, ожидалось, что порядок строчек будет таким, в котором шаблоны идут в файле pattern, но выводятся нужные мне строчки в порядке, который представлен в исходном файле.

Всего записей: 1074 | Зарегистр. 24-02-2003 | Отправлено: 21:09 11-10-2023 | Исправлено: Denis_Kokyev, 11:37 12-10-2023
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При удаленном запуске команд в Linux через pscp (из Windows) часть информации не отображается в консоли, в частности, отсутствует вывод утилиты pv в этом примере
 
pv dbname_dump.bz2 | bzcat | sudo mysql dbname
 
Выяснил что pv выплевывает свой прогресс-бар в stderr, но попытка перенаправить его в stdout через добавление к конце команды 2>&1 к успеху не привели. Даже если просто перенаправить в файл через 2>output.txt то прогресс-бар просто не отображается, а текстовый файл оказывается пустым. Как сделать так чтобы вывод pv шел в stdout ?

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 10:39 12-10-2023 | Исправлено: mithridat1, 10:44 12-10-2023
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1, ключ '-f' не помогает?

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 12:58 12-10-2023
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
Благодарю, так работает как надо Справку я не догадался получше изучить

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 13:10 12-10-2023
lsd11



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

Всего записей: 146 | Зарегистр. 29-08-2007 | Отправлено: 16:06 15-11-2023 | Исправлено: lsd11, 10:33 16-11-2023
lsd11



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

Всего записей: 146 | Зарегистр. 29-08-2007 | Отправлено: 09:07 16-11-2023 | Исправлено: lsd11, 10:33 16-11-2023
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть список "вредных" IP адресов:

Код:
 
      7 128.xx.xx.xx
      6 45.1x.xx.xx
      4 45.3x.x.x
      3 79.xx.xx.xx
 

 
Надо из первого столбца, где кол-во выделить строку, если значение превышает 5 и 2-й столбец и отправить адрес в файл. Как можно реализовать первую часть ?
 
Добавлено:
Получилось так: gawk '{if ($1 > 5) print $2}'

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 11:32 12-01-2024
Открыть новую тему     Написать ответ в эту тему

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