LINUX.ORG.RU
решено ФорумAdmin

Как сделать из текста html ссылку


0

2

Добрый день уважаемые товарищи. Такая проблема есть файл 1.txt из него построчно взять текст и сделать из него ссылки. Например перед добавлением каждой строки добавить <a href=«111.htm»>111</a><br> а вместо 111 вставить текст

Буду очень благодарен за помощь...

man sed

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

sdio ★★★★★
()
 pattern = [r'(?P<text>\w+)', r'<a href="\g<text>.html">\g<text></a>']
 string = re.sub(pattern[0], pattern[1], line)

Могу дать полное решение за 3 доллара. (:

Lilly
()

Ну например на питоне:

with open('1.txt') as f:
    lines = f.readlines()

html = "<br/>\n".join(map(lambda x:'<a href="{0}.html">{0}</a>'.format(x), lines))

print(html)
Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 2)

shell + cat + for + echo

Прикалываетесь? Любой простенький FAQ по shell scripting имеет уже готовый рецепт для такой задачи!

black_13
()

спасибо большое всем кто откликнулся... я конечно понимаю что я как говорится «а мама говорила деньги в бидончике».

Подскажите чайнику почему данный вариант не работает. Отрабатывает но ссылок в файле нет.

#!/bin/bash new1=$(cat 5.txt) sed -i.bak 's|\(www.*\)|<a href=\«$new1\'>\1</a>|» new1.txt

заранее благодарен. пс ман читал но пока в полном недогребе

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

Я вообще-то не тебе писал. Так что успокойся.

sdio ★★★★★
()
Ответ на: комментарий от neogenik
$ echo aga | sed 's/.*/kuku=>"&"<=bebe"&"/'
kuku=>"aga"<=bebe"aga"
sdio ★★★★★
()
Ответ на: комментарий от sdio

не знаешь про & в правой части

Специфический синтаксис sedа наизусть не помню, да. Но какая разница в данном случае?

Позор

Позор - это молчать, когда просят помочь, а потом кричать «я могу лучше», когда кто-то другой помог.

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

Огромное спасибо $ cat source.txt | sed -r 's/^(.*)$/<a href=«\1.htm»>\1<\/a>/' > result.html ddos3 (07.05.2014 14:04:12) Ответить на это сообщение Ссылка

все работает...

neogenik
() автор топика
Ответ на: комментарий от ddos3

Позор - это молчать, когда просят помочь, а потом кричать «я могу лучше», когда кто-то другой помог.

Позор! Медвежья услуга — делать такие простые вещи человеку даже не попытавшемуся что-то изучить и сделать самому. Плодите халявщиков.

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

Писец какой же я халявщик самому стыдно что не вкуриваю sed пипец как стыдно... мог бы сам не спрашивал бы ...

neogenik
() автор топика
cat 1.txt | while read ; do echo "<a href=$REPLY.html>$REPLY</a>" ; done > links.html
redgremlin ★★★★★
()
Ответ на: комментарий от sdio

Какие мы культурные ))) браво очень тактично к начинающим))) сразу видно толерантность и понимание к тем кто учится... Пускай и не все понимает...

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

Уважаемый Умнейший Великий и тд и тп...

neogenik
() автор топика
Ответ на: комментарий от sdio

потешить свое Эго за счет других ... умно очень умно... вот я пол дня сидел вчера не мог в курить как сделать так как не макался...

Сегодня просидел пол дня и этот момент не могу разобрать... И тут пришел «очень умный» и говорит читай ман )))) Удивительно а что же я раньше делал)))) Я наверно тупой раз не могу въехать в синтаксис и не могу найти ответ... вот сейчас тоже пытаюсь да писать кусок и не могу понять где ошибка...

Наверное как у вас у всех опыта вагон ...

neogenik
() автор топика
Ответ на: комментарий от sdio

Ну почему медвежья услуга? Кроме ТС ведь все эти варианты читает ещё куча людей, которым может быть интересно такое разнообразие решений.

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

вот я пол дня сидел вчера не мог в курить как сделать так как не макался...

Сегодня просидел пол дня и этот момент не могу разобрать...

Два по половине дня - это целый день. За день по твоему вопросу не осилить ABS, который давно на русский язык переведён, это надо постараться.

http://www.opennet.ru/docs/RUS/bash_scripting_guide/bash_scripting_guide-prog...

http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html

Хотя что это я, ведь гораздо проще на форуме понапрягать народ, прикинувшись нубом. Здесь ведь все только и ждут, когда такой как ты посетитель, задаст вопрос который гуглится за несколько минут.

// и отметь тему как решённую, раз тебе тут помогли

shrub ★★★★★
()
Последнее исправление: shrub (всего исправлений: 1)
Ответ на: комментарий от shrub

а кто прикидывается? если мазохиз с поиском не правильно поставленных кавычек для вас в радость то я считаю что человек более опытный которому не сложно подсказать может ответить там где у другого уже башня едит...

Удивительные люди... Такое ощущения что все прям все сами учили и никого не спрашивали...

neogenik
() автор топика

Всем большое спасибо задача решена...

neogenik
() автор топика
Ответ на: комментарий от emulek

Более универсальное решение. Может у него инпут из одного файла идет, а может какой-нибудь хитрый греп из откуда-нибудь, или еще что. Проще в sed через пайп прокинуть, тогда если что, не придется менять параметры sedа. unix-way, короче.

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

Проще в sed через пайп прокинуть, тогда если что, не придется менять параметры sedа. unix-way, короче.

какой это нафиг unix-way? Sed сама умеет и файлы читать, и как grep работает. Причём работает намного быстрее, чем конвейер grep|sed. И лучше, т.к. контролировать одну программу лучше, чем две одновременно.

Просто у тебя руки из жопы, и команды ты пишешь методом тыка. Что очевидно по твоему говнокоду.

Да, кроме cat, у тебя есть ещё ненужные якоря ^$, и ненужные скобки вокруг .*, надо так: sed 's/.*/xxx&yyy&zzz/' filename

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

надо так

И где ты был вчера, со своим сакральным знанием, как надо?

Sed сама умеет и файлы читать, и как grep работает

Ну и расскажи мне, как сделать с седом, если нужно взять по десять первых строк (не считая пустых и начинающихся с #) из всех файлов с именем strings.txt в директории (рекурсивно)?

Просто у тебя руки из жопы, и команды ты пишешь методом тыка.

Очень ценное замечание, приму к сведению.

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

И где ты был вчера, со своим сакральным знанием, как надо?

учебник я пять лет назад написал. И гугл про него в курсе.

Ну и расскажи мне, как сделать с седом, если нужно взять по десять первых строк (не считая пустых и начинающихся с #) из всех файлов с именем strings.txt в директории (рекурсивно)?

find -name strings.txt -exec sed -rn '/^$/b;/^#/b;H;x;s/([^\n]*\n){3}/&/;tl;x;b;:l;s/\n//p;q' {} \;

интересно, а ты как сделаешь?

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

интересно, а ты как сделаешь?

Не буду смешивать две разные задачи (подготовка исходных данных + обработка данных) в одном выражении. Мне, видишь ли, ехать, а не шашечки.

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

Не буду смешивать две разные задачи (подготовка исходных данных + обработка данных) в одном выражении. Мне, видишь ли, ехать, а не шашечки.

я не вижу тут двух задач. Вижу только одну. (точнее «найти файл» и «обработать файл»).

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

я не вижу тут двух задач

1. Подготовить данные (10 первых строк из всех файлов)
2. Заменить строки на <a href=«xxx»>xxx</a>

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

не прикидывайся. Ты сказал:

нужно взять по десять первых строк (не считая пустых и начинающихся с #) из всех файлов с именем strings.txt в директории (рекурсивно)?

и где решение?

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

не прикидывайся

У тебя совсем с головой плохо, не можешь за контекстом уследить?

emulek: на кой ляд ты cat используешь?
ddos3: Более универсальное решение. Может у него какой-нибудь хитрый греп из откуда-нибудь, или еще что.
emulek: Sed сама умеет и файлы читать, и как grep работает
ddos3: Ну и расскажи мне, как сделать с седом, если нужно взять по десять первых строк.

Тебе совсем не понятно, что речь идет про ту же задачу с добавочным условием? Или ты просто уже понял, что сморозил глупость, и теперь увиливаешь?

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

sed -rn '/^$/b;/^#/b;H;x;s/([^\n]*\n){3}/&/;x;T;x;s/\n//p;q'

Опять ты пишешь write only код!

Эффективность не главное, главное — читабельность и возможность легкой правки через неделю без ломания глаз и мозга.

find -name strings.txt -exec sh -c "egrep -v '^$|^#' {} | head -10 | sed 's/old/new/'" \;

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

Тебе совсем не понятно, что речь идет про ту же задачу с добавочным условием?

мне-то понятно. Я только не вижу твоего решения. Что, не получается в find запихать свой конвейер с cat?

сморозил глупость, и теперь увиливаешь?

я дал рабочее решение, как эти все твои условия делаются одной командой sed. А вот ты заговорился, придумал дикие условия, которые и сам не можешь реализовать своим способом с конвейерами. Как видишь, эти твои конвейеры подходят только для тривиальных условий вроде cat, которые ничего не делают.

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

я дал рабочее решение

Я рабочего решения не видел. Ты дал отдельные решения для двух частей задачи, но не осилил написать полное решение одним куском только sedом без конвеера. Напишешь - поговорим.

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

sed -rn '/^$/b;/^#/b;H;x;s/([^\n]*\n){3}/&/;x;T;x;s/\n//p;q'

Опять ты пишешь write only код!

нормальный код, легко читаемый. Просто ты читать не умеешь, и учится не желаешь.

Эффективность не главное, главное — читабельность и возможность легкой правки через неделю без ломания глаз и мозга.

я этот код и через год поправлю без проблем. Sed это как велосипед, достаточно один раз научиться, а разучиться невозможно.

find -name strings.txt -exec sh -c «egrep -v '^$|^#' {} | head -10 | sed 's/old/new/'» \;

дело не в мифической «эффектности», а в управляемосте и простоте. Что случится, если egrep не сработает? Вот и я не знаю...

И да, egrep устарела, и НЕ рекомендуется к использованию. Юзай grep -E.

Ещё вопрос по твоему коду: в каком окружении и вообще, КАКАЯ sh будет выполняться? hz.

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