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

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

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

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

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

 

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

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

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



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

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

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

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

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

Всего записей: 122 | Зарегистр. 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 чтобы убрать повторы.
Если надо регулярку чтобы извлечь только валидные адреса, то могу тоже скинуть. Когда-то гуглил вопрос этот и сохранил для себя.

Всего записей: 1748 | Зарегистр. 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]?)"

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

Junior 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])?"

Всего записей: 122 | Зарегистр. 08-09-2001 | Отправлено: 12:12 06-01-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los> Вопрос изначально был про sed :-)
 
Вот удивительное дело!  Как сделать, вы не знаете, а чем при этом обойдетесь — уже знаете.  :-)
 
> $ curl -L ... > ips.txt
 
Да ну где же это видано — сшивать встык разноформатные файлы: в разделением пробелами и запятыми.
 
Нет, ну в вашем частном случае это, может быть, и не испортит дела.  Скажем, если у вас относительно полноценный АВК:

#!/usr/bin/awk -f
 
BEGIN { FS = "[[:space:]]+|," }
 
/^#/ { next }                   # comments
{ print $1 }                    # address in the 1st field


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 11:49 07-01-2018 | Исправлено: ASE_DAG, 11:50 07-01-2018
los

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

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

удивительно другое - у людей спрашивают про одно, люди вопроса не понимают(или читают не внимательно) и делают поспешные выводы, потом будут удивляться, что им, как им кажется, грубят

Цитата:
Да ну где же это видано — сшивать встык разноформатные файлы: в разделением пробелами и запятыми.

здесь, и словом "формат" вы оперируете слишком вольно.

Цитата:
Нет, ну в вашем частном случае это, может быть, и не испортит дела.

Так и есть, случай частный и условное решение (плюс понять где сам ошибаешься) спрашивалось именно под него.
 
Только для примера:
curl -L $url > $tmpfile
 
/usr/local/bin/sed -n 's/\(^\([0-9]\{1,3\}[\.]\)\{3\}[0-9]\{1,3\}\(\/[0-9]\{1,2\}\)\?\).*/\1/p' $tmpfile | /usr/bin/sort -u | /usr/bin/tr "\n" " " > $IPs
пока подходит, не смотря на ваше мнение о "форматах"
Считаете что можно сделать лучше(правильнее,элегантней и т.п.) предлагайте - для этого и форум,а ремарки о том кто чего знает или не знает оставьте для тех кому интересно ваше мнение по этому поводу.
Я достаточно доходчиво и вежливо написал?

Всего записей: 122 | Зарегистр. 08-09-2001 | Отправлено: 12:47 07-01-2018
syrenium

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишу сюда, поскольку перенаправляет
Если ошибся темой, поправьте.
Использую cURL в Windows 10 x64 для загрузки файлов.
Возможно ли сделать так, чтобы файлы загружались и сохранялись, только если они новее, чем расположенный на диске?

Всего записей: 344 | Зарегистр. 07-12-2015 | Отправлено: 17:09 15-01-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
syrenium
Ну Windows, конечно, тут не в тему но про curl отвечу.
Серверу можно послать заголовок -H "If-Modified-Since: ..." (если сервер такое понимает для данного файла)

----------
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 | Отправлено: 17:52 15-01-2018 | Исправлено: Alukardd, 17:53 15-01-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
syrenium> Если ошибся темой, поправьте.  
 
Нет-нет, все правильно.
 
> Возможно ли сделать так, чтобы файлы загружались и сохранялись, только если они новее, чем расположенный на диске?
 
Ну, если сервер сообщает вам дату изменения, то почему может быть нельзя?
 
Помимо перекладывания это задачи на сервер, разумеется, это можно сделать и на клиенте.  Но заготовки под такое поведение в curl(1) нет.  Как его, собственно, нет и под серверное.  Так что нужно либо взять еще какой-нибудь язык общего назначения, либо поискать программку, где такой алгоритм зашит — wget(1), например.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:41 15-01-2018
redson



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как в bash скрипте в одну переменную добавить, некоторое количество ip адресов, а потом обращаться к этой переменной?
 
Например, то что я хочу:
 
#!/bin/bash
ipadress="192.168.1.5 192.168.1.7 192.168.1.10 10.10.2.2"
 
echo ${ipadress}
 
на выходе:
 
192.168.1.5
192.168.1.7
192.168.1.10
10.10.2.2

Всего записей: 1075 | Зарегистр. 23-04-2007 | Отправлено: 09:25 23-01-2018
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
redson
Вам нужно создать массив
 
ipadress=(192.168.1.5 192.168.1.7 192.168.1.10 10.10.2.2)
 
echo ${ipadress[0]}
echo ${ipadress[1]}
..

Всего записей: 3924 | Зарегистр. 05-01-2006 | Отправлено: 09:33 23-01-2018 | Исправлено: mithridat1, 09:35 23-01-2018
redson



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
спасибо, получилось)))

Всего записей: 1075 | Зарегистр. 23-04-2007 | Отправлено: 19:41 23-01-2018
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delete.
Проблема решена, можно удалять.

Всего записей: 277 | Зарегистр. 19-04-2003 | Отправлено: 10:18 02-02-2018 | Исправлено: digital422, 14:29 03-02-2018
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Отбой, переконвертировал входной файл через gawk... {print $3";"$9";"$10}, символ в конце пропал.

Всего записей: 277 | Зарегистр. 19-04-2003 | Отправлено: 19:35 02-02-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