Удаление / замена html-тегов в bash

у меня есть файл со строками, содержащими:

    <li><b> Some Text:</b> More Text </li>

Я хочу удалить теги html и заменить </b> тег с тире, поэтому он становится таким:

Некоторый Текст: - Больше Текста

Я пытаюсь использовать sed, однако я не могу найти правильную комбинацию регулярных выражений.

2 ответов


если вы строго хотите удалить все HTML-теги, но в то же время только заменить </b> тег -, вы можете связать два простых sed команды с трубой:

cat your_file | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' > stripped_file

это передаст все содержимое файла в первый sed команда, которая будет обрабатывать замены </b> до -. Затем вывод этого будет передан в sed это заменит все теги HTML пустыми строками. Окончательный вывод будет сохранен в новый файл stripped_file.

используя аналогичный метод, как и другой ответ от @Steve, вы также можете использовать sed ' s -e опция для цепочки выражений в одну (непроверенную команду); путем добавления -i, вы также можете прочитать и заменить содержимое исходного файла без необходимости cat, или новый файл:

sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file

это сделает замену как раз как прикованная-команда выше, однако на этот раз она сразу заменит содержание в входном сигнале файл. Чтобы сохранить в новый файл, удалите -i и добавить > stripped_file до конца (или любое имя файла, которое вы выбираете).


один из способов, используя GNU sed:

sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g' file.txt

пример:

echo "<li><b> Some Text:</b> More Text </li>" | sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g'

результат:

 Some Text:- More Text