LINUX.ORG.RU

Парсер на BASH

 ,


2

4

Есть список url'в вида:

  • http(s)://domein.zone
  • http(s)://domein.zone/content
  • http(s)://subdomein.domein.zone
  • http(s)://subdomein.domein.zone/content

и иже с ними

Необходимо разделить на 2 списка:

  • кастрируентся все что до домена/субдомена и после зоны
  • урл целеком, но с префексом перед /content'ом (если таковой имеется)


Последнее исправление: pafflootiy (всего исправлений: 1)

Ответ на: комментарий от pafflootiy

я понял...rtfm

Именно, manual. А то, что советует т. Kroz, читать (пока) не надо.

Zmicier ★★★★★
()

А вообще, что бы вы ни прочитали, все равно пойдете гуглить — найдете кучу отборного говнокода на смеси Баша с АВКом (и хорошо, если не с Седом), каким богата всемирная паутина, и уверуете, что так и надо.

Давайте, я все-таки лучше расскажу. Только сперва надо найти общий язык, а то вы на каком-то своем разговариваете, я вас не понимаю.

Итак, открываем действующий стандарт на URI — RFC 3986, изучаем, как что называется, и заодно находим рекомендуемое регулярное выражение для частного случая разбора URI, когда имя пользователя, пароль, порт выделять не надо. Это вполне ваш случай.

Используем его:

$ uri='https://www.linux.org.ru/forum/general/13032292'
$ [[ $uri =~ ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? ]]
$ scheme="${BASH_REMATCH[2]}"
$ authority="${BASH_REMATCH[4]}"
$ path="${BASH_REMATCH[5]}"
$ query="${BASH_REMATCH[7]}"
$ fragment="${BASH_REMATCH[9]}"

Если теперь нужно разложить имя узла по точкам, то именно это и делаем. И аналогично с путем.

$ IFS='.' read -ra domains <<< "$authority"
$ IFS='/' read -ra path_segments <<< "$path"

Потом используем, что нам надо:

$ printf '%s\n' "$scheme" "${domains[-1]}" "${path_segments[-1]}"
https
ru
13032292
Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

Хочется заметить, что подобные стандартизированные вещи давно реализованы в библиотеке любого нормального языка. И не нужно ничего на bash выдумывать.

anonymous
()
Ответ на: комментарий от anonymous

«Стыдно не знать»-это не ответ! Зачем нужны подобные ресурсы, если на них в ответ на все вопросы будут отвечать «стыдно не знать»? Да. Я не знаю ни одного языка программирования. Мне 35 лет, а я только начал...ТОЛЬКО НАЧАЛ изучать python. Но книги и практика не могут дать ВСЁ. Нужен и опыт других людей. А по Вашему все должно выглядеть следующим образом: -Ребята, есть проблема такого характера:"..." -А я знаю как ее решить, но не скажу -Я тоже не скажу -И я не скажу, учи матчасть При такой схеме, какое, по Вашему, назначение данного(и подобных) ресурса? Насколько он будет нужен и востребован? ПС А матчасть я все же подучу...

pafflootiy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.