Удаление / замена 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