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

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

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

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

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

 

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

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

Всего записей: 1747 | Зарегистр. 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... Похоже, этот случай.

Всего записей: 5259 | Зарегистр. 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 раз, но вывелся только один раз?

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



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

Всего записей: 6689 | Зарегистр. 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 с конца.

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

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

Всего записей: 165 | Зарегистр. 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 и подскажет как правильно написать?  
Заранее благодарен!

Всего записей: 442 | Зарегистр. 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


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

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

Всего записей: 69 | Зарегистр. 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(), но не получается.
Подробнее...

Всего записей: 404 | Зарегистр. 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

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



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

Всего записей: 297 | Зарегистр. 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.

Всего записей: 6201 | Зарегистр. 28-08-2008 | Отправлено: 08:38 12-12-2017
qw12



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

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



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

Всего записей: 6689 | Зарегистр. 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.

Всего записей: 6201 | Зарегистр. 28-08-2008 | Отправлено: 15:27 27-12-2017 | Исправлено: Alukardd, 15:31 27-12-2017
los

Junior 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

Всего записей: 122 | Зарегистр. 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

Компьютерный форум 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-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru