WedX - журнал о программировании и компьютерных науках

использование sed в скрипте для добавления тега html в текст

Я пытаюсь использовать sed в сценарии оболочки, чтобы добавить теги гиперссылки html к URL-адресу в текстовом файле.

Это содержимое моего newtext.txt:

www.example.com

И вот желаемое содержимое newtext.txt, которое я хотел бы получить после запуска моего скрипта:

<a href="https://www.example.com">www.example.com</a>

Вот содержимое моего текущего скрипта addhtml.sh:

#!/bin/bash
newtextv='cat newtext.txt'
sed -i.bak 's|\(www.*\)|<a href="$newtextv">\1</a>|' newtext.txt

Но, к сожалению, после запуска скрипта содержимое newtext.txt становится таким:

<a href="$newtextv">www.example.com</a>

Я считаю, что моя ошибка как-то связана с тем, как цитируется моя переменная?

В конечном итоге я хочу, чтобы этот скрипт также мог конвертировать полные URL-адреса (содержащие https:// )... Мне, очевидно, нужно значительно улучшить свои знания sed (мне потребовалось несколько дней, чтобы добраться до этого далеко), но я могу не обернуть мою голову вокруг этого.

Благодарю вас!

03.08.2012

  • Я ценю всю помощь! Я обещаю оказать поддержку сообществу, когда у меня будут необходимые для этого навыки. Благодарю вас! Хотел бы я, чтобы я мог проголосовать за всех вас. 04.08.2012

Ответы:


1

Если вы хотите поместить содержимое файла в переменную:

newtextv=$(cat newtext.txt)

Но на самом деле вы, вероятно, хотите что-то вроде этого (но, очевидно, с лучшим регулярным выражением):

sed 's|www\.[^ ]*|<a href="&">&</a>|g' <newtext.txt >newtext.html

Sed заменяет каждые & соответствующей строкой.

03.08.2012
  • Большое спасибо. Это очень помогает мне в моем вопросе, а также в некоторых других вещах, которые я пытаюсь сделать в данный момент. Я ценю это! 04.08.2012

  • 2

    Зачем возиться с переменной?

    sed -i 's|\(www.*\)|<a href="\1">\1</a>|' newtext.txt
    

    or

    sed -i 's|www.*|<a href="&">&</a>|' newtext.txt
    
    03.08.2012

    3

    Если у вас есть URL-адрес в переменной, вы также можете сделать это без sed:

    newtextv=www.example.com
    echo "<a href=\"https://${newtextv#www.}\">$newtextv</a>"
    

    возвращается

    <a href="https://example.com">www.example.com</a>
    

    В Bash вы можете манипулировать переменными как подмножеством подстановки переменных.
    Здесь ${newtextv#www.} в основном означает взять $newtextv и вырезать "www". с самого начала

    03.08.2012
  • Большое спасибо. Я ценю вашу помощь и дополнительную информацию. Я думаю, что, возможно, это может быть лучшим путем для того, что я пытаюсь выполнить, поскольку он будет работать и с полным URL-адресом. Благодарю вас! 04.08.2012

  • 4

    Ваша проблема в двух маленьких синтаксических ошибках:

    1. cat newtext.txt никогда не будет выполняться, вам нужно использовать обратные кавычки ` или $()
    2. использование одинарных кавычек ' предотвращает расширение переменных. Чтобы разрешить расширение переменной, используйте двойные кавычки "

    вот что вы хотите сделать:

    #!/bin/bash
    newtextv=$(cat newtext.txt)
    sed -i.bak "s|\(www.*\)|<a href=\"$newtextv\">\1</a>|" newtext.txt
    
    04.08.2012
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]