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

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

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

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

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

Всего записей: 7458 | Зарегистр. 08-09-2001 | Отправлено: 18:34 05-01-2018
karavan



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

Код:
$ cat ./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  
$ sed -n 's/\(\([0-9]\{1,3\}[\.]\)\{3\}[0-9]\{1,3\}\(\/[1-9]\{1,2\}\)\?\).*/\1/p' ./ips.txt  
82.102.173.91
66.240.205.34
5.8.37.0/24
91.121.121.72/16
91.121.121.72
 

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 20:39 05-01-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan,
спасибо и прошу извинить за неточно поставленую задачу.
в вашем варианте не игнорируется строка
# Number of entries: 5101.226.196.136
и ip 216.47.96.0/20 показывается как  216.47.96.0/2

Всего записей: 7458 | Зарегистр. 08-09-2001 | Отправлено: 21:26 05-01-2018
karavan



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

Код:
$ cat ./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
# Number of entries: 5101.226.196.136  
216.47.96.0/20
 
$ sed -n 's/\(^\([0-9]\{1,3\}[\.]\)\{3\}[0-9]\{1,3\}\(\/[0-9]\{1,2\}\)\?\).*/\1/p' ./ips.txt  
82.102.173.91
66.240.205.34
5.8.37.0/24
91.121.121.72/16
91.121.121.72
216.47.96.0/20
 

 

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 21:42 05-01-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan,
Спасибо.
Это самый "короткий" вариант для sed?

Всего записей: 7458 | Зарегистр. 08-09-2001 | Отправлено: 22:03 05-01-2018
karavan



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

Цитата:
Это самый "короткий" вариант для sed?

Не знаю. Я сам на стадии изучения регулярок.
Возможно камрады более опытные подскажут вариант короче.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 22:21 05-01-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan,
просто для уточнения:
ваш вариант работает у меня с gnu sed, для sed идущего с macOS он не подходит.
почему изначально и спрашивал что подправить в команде.

Всего записей: 7458 | Зарегистр. 08-09-2001 | Отправлено: 23:17 05-01-2018
thejustsoul



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

Код:
cat ips.txt | grep -Eo "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
82.102.173.91
66.240.205.34
5.8.37.0
91.121.121.72
91.121.121.72
101.226.196.136
216.47.96.0

Если совсем грубо, то:

Код:
cat ips.txt | grep -Eo "[0-9\.]{7,15}"
82.102.173.91
66.240.205.34
5.8.37.0
91.121.121.72
91.121.121.72
5101.226.196.13
216.47.96.0
 

Еще можно добавить | uniq чтобы убрать повторы.
Если надо регулярку чтобы извлечь только валидные адреса, то могу тоже скинуть. Когда-то гуглил вопрос этот и сохранил для себя.

Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 23:20 05-01-2018 | Исправлено: thejustsoul, 23:22 05-01-2018
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
thejustsoul
В задаче от los надо еще префиксы сети учитывать.
 
los
Цитата:
Это самый "короткий" вариант для sed?

Вариант от thejustsoul с grep получше выглядит.

Код:
$ grep -Eo '^(([0-9]{1,3}[\.]){3}[0-9]{1,3}(\/[0-9]{1,2})?)' ./ips.txt  
82.102.173.91
66.240.205.34
5.8.37.0/24
91.121.121.72/16
91.121.121.72
216.47.96.0/20
 

P.S.: Во всех вариантах не учитывается вхождение адреса в упоминаемый диапазон.
Если в файле будет подобное:
Код:
192.168.10.10
192.168.10.0/24
То будут выведены обе строки.
 
Добавлено:

Цитата:
Если надо регулярку чтобы извлечь только валидные адреса

"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 23:38 05-01-2018 | Исправлено: karavan, 23:49 05-01-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los> Это самый короткий вариант для sed?
 
Вариант чего?  Выбора из произвольного текстового файла всех слов, похожих на адрес IPv4 с маской?
 
Или вам все-таки надо разобрать *структурированный* файл?
 
Добавлено:
los, если непонятно, о чем я:
 
#!/usr/bin/awk -f
 
/^#/ { next }                   # comments
{ print $1 }                    # address in the 1st field


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 02:08 06-01-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос изначально был про sed Но в любом случае всем большое спасибо.
thejustsoul,
в вашем варианте с grep из строки
219.147.95.246    246.95.147.219.broad.dq.hl.dynamic.163data.com.cn
подхватывается также 246.95.147.219
и вместо
1.10.16.0/20 получается 1.10.16.0/2
karavan,
за "grep" спасибо но у меня с подобной "командой" проблем не было(как-то разбирался) застрял с sed причем в начале из-за разницы между gnu sed и маковским.
ASE_DAG + кому интересно,

Цитата:
Вариант чего?  Выбора из произвольного текстового файла всех слов, похожих на адрес IPv4 с маской?

Раз рассматриваем варианты не только с sed. К примеру:
Нужно создать blocklist для pf.
curl -L "https://zeustracker.abuse.ch/blocklist.php?download=ipblocklist http://feeds.dshield.org/top10-2.txt http://www.spamhaus.org/drop/drop.lasso https://ransomwaretracker.abuse.ch/downloads/RW_IPBL.txt https://feodotracker.abuse.ch/blocklist/?download=ipblocklist https://labs.snort.org/feeds/ip-filter.blf https://sslbl.abuse.ch/blacklist/sslipblacklist.csv https://sslbl.abuse.ch/blacklist/dyre_sslipblacklist.csv http://rules.emergingthreats.net/blockrules/compromised-ips.txt" > ips.txt
нужно выбрать ip, cidr.
избегая
219.147.95.246    246.95.147.219.broad.dq.hl.dynamic.163data.com.cn
т.е. из строки только первый ip или cidr
 
 
 
Добавлено:
karavan,

Цитата:
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"

ваш вариант имеет те же "проблемы", что и вариант thejustsoul
"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))|^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])?"

Всего записей: 7458 | Зарегистр. 08-09-2001 | Отправлено: 12:12 06-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