LINUX.ORG.RU

вывод списка ссылок из большого txt файла


0

2

Добрый вечер!

Есть файл XML со списком URL, которые располагаются хаотично, необходимо из него составить другой файл с теми же URL, но отсечь весь остальной текст...

маска <![CDATA[http:bla-bla-bla]]>

По форумам нашел только как sed awk и прочее работают по-строчно... а тут прикол в том что файл - это одна большая строка.

Подскажите регулярное выражение, чтобы шел поиск по маске «от http:// до ]]» и готовые URL-ы складывать в отдельный файл.

Спасибо!

Есть файл XML

XML

man XSLT

пример файла в студию

anonymous ()

Напиши несколькострочник на пайтоне, там есть findall. Ещё можно использовать ключ, чтобы поиск шел игнорируя переходы строк. Регулярное выражение...

http:\/\/.+?[^\]]

Как-то вот так, но в разных диалектах регэкспов есть отличия, тебя какой интересует?

Lilly ()
grep -Po 'http://.*(?=]])' in.txt >> out.txt

а тут прикол в том что файл - это одна большая строка.

Прошу прощения, не заметил сразу. Ну если задача позволяет, можно <![CDATA заменить на \n<![CDATA, а затем использовать grep.

xtraeft ★★☆☆ ()
Последнее исправление: xtraeft (всего исправлений: 3)

По форумам нашел только как sed awk и прочее работают по-строчно... а тут прикол в том что файл - это одна большая строка.

гм, ну и что?

emulek ()

CDATA тут хреново подходит для нормального (не sed сотоварищи) распознавания (лучше если есть внешний тег), но можно по префиксу:

echo "<Obj><Name><![CDATA[SomeText]]></Name></Obj>" | xmlstarlet sel -t -v "/Obj/Name[starts-with(text(),"Some")]"
anonymous ()
Ответ на: комментарий от anonymous

Поправлюсь) :

xmlstarlet sel -t -m "/Obj/Name/text()" -v . -n

anonymous ()

Задача однократная ? Если да, то открой этот файл в офисе - Writer да скопируй оставшийся текст.

TEX ★★ ()

прикол в том что файл - это одна большая строка.

Если быстро и грязно: скорее всего сработает преварительный sed 's/>/>\n/g'.

anonymous ()

Ну или что то вроде

xmlstarlet pyx account.acctype.xml | grep "http:" | cut -d " " -f 2,3,4,5

TEX ★★ ()
Ответ на: комментарий от Lilly

вообще я с опаской зашел в форум Разработчиков, ибо я знаю только консольные awk sed cut и смежные... поэтому мне бы что-нить базовыми командами линукса)

dev-ice ()
grep --only-matching --perl-regexp "http(s?):\/\/[^ \"\(\)\<\>]*" 
nikitos ★★ ()
Ответ на: комментарий от dev-ice

На вкус и цвет же решения разные. Тем более их тут набросали вагон и тележку - используй какое больше по духу, я своё решение не считаю единственно верным, а консольные и выше и ниже варианты есть. А вместо awk+sed рекомендую один раз выучить перл - для работы с текстом идеальный инструмент. Альтернатива - пайтон. Но тут, опять таки, настаивать не могу, только советовать.

Lilly ()
Ответ на: комментарий от dev-ice

Что ты собрался искать, если в этом треде тебе уже с десяток решений привели?

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