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

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

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

Всего записей: 7322 | Зарегистр. 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 он не подходит.
почему изначально и спрашивал что подправить в команде.

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

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

Gold 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
пока подходит, не смотря на ваше мнение о "форматах"
Считаете что можно сделать лучше(правильнее,элегантней и т.п.) предлагайте - для этого и форум,а ремарки о том кто чего знает или не знает оставьте для тех кому интересно ваше мнение по этому поводу.
Я достаточно доходчиво и вежливо написал?

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

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

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

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

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

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



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

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

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

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

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

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