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

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Skif_off
В какой кодировке скрипт?  
Смените формат на UTF-8, Unix (LF), если в notepad++, то в строке состояния, где написано "Windows (CR LF)", ПКМ->"Преобразовать в UNIX-формат (LF)", ну и кодировку выставьте в UTF-8.
 
Либо можно пересоздать (или конвертировать) заново :
Код:
echo -e '#!/bin/sh\nrm -f /usr/local/bin/geany\nrm -rf /usr/local/include/geany\necho "ok"' > del2.sh

Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 11:18 08-10-2017 | Исправлено: thejustsoul, 11:20 08-10-2017
Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG, thejustsoul
Спасибо, буду знать, куда сначала смотреть Дело действительно оказалось в конце строк CR+LF, есть у меня дурная манера иногда вместо создания файла копировать существующий с переименованием (даже не текстовый, бывает), потом Ctrl+A > Ctrl+V > Ctrl+S... Похоже, этот случай.

Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 12:47 08-10-2017
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго.
FreeBsd.
вытаскиваю адреса из логов nginx так:

Код:
 
cat /var/log/nginx.log | egrep -o '^[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' | sort
 

Подскажите, как получить уникальные адреса?
В том смысле, что встретился 15.15.15.15 20 раз, но вывелся только один раз?

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 03:24 29-10-2017
Pasha_ZZZ



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

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 04:03 29-10-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
Вдруг будет интересно, выведет количество и сам адрес:

Код:
#!/usr/bin/env bash
 
FILE=$1
 
[ $# -eq 0 ] && exit 1
 
if [ -f "$FILE" ]; then
    echo "Processing log $FILE..."
    if file --mime-type "$FILE" | grep -q gzip$; then
        zcat "$FILE" | awk '{print $1}' | sort | uniq -c | sort -n | tail
    else
        cat "$FILE" | awk '{print $1}' | sort | uniq -c | sort -n | tail
    fi
fi

Юзать так:
Код:
# ./logs.sh /var/log/nginx.log
Или так:
Код:
# ./logs.sh /var/log/nginx.log.2.gz

Если убрать | tail, то будут выводиться все, вместо 10 с конца.

Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 23:03 29-10-2017 | Исправлено: thejustsoul, 23:41 29-10-2017
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
thejustsoul
Pasha_ZZZ
Спасибо, исчерпывающе!

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 08:28 30-10-2017
kaurych



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет!
Есть вопрос по потоковому редактору sed.  
В файле куча строк и надо только после трёх определённых, которые совпадут по условию вставить несколько других строк.
Допустим есть фаил, filetest.
Фаил содержит:
string1
string2
string3
string4
string5
string6
Только после строк совпадающих с условием, а это в примере строки:
string3
string4
string5
можно вставить три строки:
line 1
line 2
line 3
В результате должно получиться:
string
string1
string2
string3
string4
string5
line 1
line 2
line 3
string6
Хорошо подходит для начала решение:  

Код:
sed '/string3/{N;/string4/{N;/string5/s/.*/замена/}}' filetest  

или  

Код:
sed '/string3/{N;N;s/string3\nstring4\nstring5/заменяющий текст/}'  

НО она отрабатывает ТОЛЬКО НА ЗАМЕНУ так как в приведённом примере используется команда 's'
Правильно будет использовать в потоковом редакторе SED команду 'a' но блин куда её влепить не знаю уже голова дымится, команда d;p;s отрабатывает а 'a' не хочет!  
Возможно кто нибудь уже АС в SED и подскажет как правильно написать?  
Заранее благодарен!

Всего записей: 465 | Зарегистр. 16-05-2006 | Отправлено: 16:21 22-11-2017 | Исправлено: kaurych, 16:41 22-11-2017
mikeus



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

Код:
sed '/string3/{n;/string4/{n;/string5/s/$/\nline1\nline2\nline3/}}' filetest

'N' не требуется, достаточно 'n'.
 
(добавлено)
 'a' - тоже можно заставить работать. Последняя строка добавляемого текста для команды 'a' должна заканчиваться переводом строки без завершающего '\'.

Код:
sed '/string3/{n;/string4/{n;/string5/a\
line1\
line2\
line3
}}' filetest

Код:
sed '/string3/{n;/string4/{n;/string5/a line1\nline2\nline3  
}}' filetest


Всего записей: 327 | Зарегистр. 20-12-2007 | Отправлено: 18:53 22-11-2017 | Исправлено: mikeus, 19:10 22-11-2017
Vorland

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извините если не в тему, но вот такой вопрос:
подскажите название утилит, которыми можно выполнить такие операции в команной строке:
1) посчитать хеш-суммы блоков заданного размера в файле (например, посчитать и вывести хеш блока из 512 байт в начале файла, затем то же для следующего блока из 512 байт этого же файла и т.д.). Если при этом ещё будет посчитан хеш всего файла - совсем замечательно;
2) взять из файла по некоторому смещению блок нужного мне размера и сохранить его в другой файл;
3) выполнить операцию, обратную пункту 2, т.е. взять файл и вставить его с замещением оригинала в другой файл по заданному мною смещению

Всего записей: 106 | Зарегистр. 20-12-2005 | Отправлено: 21:15 22-11-2017
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dd(1) же.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:38 22-11-2017
Taran2ul



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди. Помогите пожалуйста поправить скрипт. Хотелось бы "выкидывать" несколько категорий в результирующем плейлисте. И в теге с иконкой канала нужно имя канала перевести в нижний регистр. Пытался сделать с помощью .toLowerCase(), но не получается.
Подробнее...

Всего записей: 458 | Зарегистр. 18-02-2008 | Отправлено: 16:57 10-12-2017
Taran2ul



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
К предыдущему сообщению (почему то скрыло как спам ;(

Код:
#!/bin/sh  
serverip="http://192.168.1.240"  
 
path=`dirname $0`  
parser="/usr/bin/jq"  
filepath="/mnt/media/playlists"  
 
playlist_url="http://pomoyka.win/trash/ttv-list/ttv.json"  
json="$filepath/m3u/ttv.json"  
outdir="$filepath/m3u"  
 
header="#EXTM3U"  
newline="ZFZFaZZZ"  
#informational="informational"  
informational="Религиозные"  
 
url_prefix="$serverip:6878/ace/getstream?id="  
#url_prefix="$serverip:6878/ace/manifest.m3u8?id="  
url_postfix=""  
 
mkdir -p $filepath >> /dev/null 2>&1  
mkdir $filepath/m3u >> /dev/null 2>&1  
 
rm $json >> /dev/null 2>&1  
wget $playlist_url -O $json  
 
data=`cat $json |$parser '.channels|=sort_by(.cat,.name)'`  
size=`echo $data |$parser '.channels|length'`  
 
if [ $size -gt 1 ]  
then  
param="'.channels|=sort_by(.cat,.name)|.channels[]|select(.cat != \"$informational\")|\"#EXTINF:-1 group-title=\\\"\"+.cat+\"\\\" tvg-logo=\\\"$serverip/tv/\"+.name+\".png\\\", \"+.name+\"$newline\"+\"$url_prefix\"+.url+\"$url_postfix\"'|sed 's/$newline/\n/g'"  
eval "echo \$header; echo \$data | " $parser "-r" $param > $outdir/as.kodi.m3u  
fi

Всего записей: 458 | Зарегистр. 18-02-2008 | Отправлено: 09:53 11-12-2017
qw12



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется список IP/хостов. У всех открытый порт 443. Нужно получить данные сертификатов, конкретно, поля - Common Name и Alternate Names. После чего экспортировать эти данные в csv или куда-то ещё.
Есть идеи, как это сделать мультипоточно, вероятно, с помощью openssl?
Ну, или что посоветуйте?

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 07:07 12-12-2017
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perldoc AnyEvent::HTTP

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 08:12 12-12-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
Отдаете список хостов parallel'у, в том через openssl s_client -connect получаете нужные поля и результат пишите в отдельный файл по имени хоста. Потом просто  cat всех этих файлов в один общий.Сразу многопоточно лучше не писать в один файл, вывод может перемешаться, ну или надо заботиться о блокировках.

----------
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 | Отправлено: 08:38 12-12-2017
qw12



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Файл 25 Гб. Памяти - 16 Гб. Нужно удалить дубликаты. Идеи? Предложения?

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 09:44 27-12-2017
Pasha_ZZZ



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

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 10:36 27-12-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно и без сортировки: awk 'uniq[$1]==0{print;uniq[$1]=1}'
 
Добавлено:
Правда если уникальных данных больше 16Гб, то масив тоже должен переполниться.
Если строки оооочень длинные, то можно в массив класть некую хэш сумму строки, что сильно сэкономит память, но нагрузит проц.

----------
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 | Отправлено: 15:27 27-12-2017 | Исправлено: Alukardd, 15:31 27-12-2017
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
команда
sed -n '/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/p' ips.txt
дает результат:
82.102.173.91    
66.240.205.34    malware-hunter.census.shodan.io
5.8.37.0/24 ; SBL284078
91.121.121.72/16
91.121.121.72
что нужно добавить или изменить чтобы результат получился такой?
82.102.173.91    
66.240.205.34
5.8.37.0/24
91.121.121.72/16
91.123.221.72

Всего записей: 7333 | Зарегистр. 08-09-2001 | Отправлено: 18:34 05-01-2018
Открыть новую тему     Написать ответ в эту тему

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