Sed удалить теги из html файла

Мне нужно удалить все теги из html с помощью bash script с помощью команды sed. Я пробовал с этим

sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1

и с этим

sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $1

но я все еще что-то пропустил, любые предложения

Ответ 1

Вы можете использовать один из многих HTML текстовые конвертеры, использовать Perl регулярное выражение, если это возможно <.+?> Или, если это необходимо sed использовать <[^>]*>

sed -e 's/<[^>]*>//g' file.html

Если места для ошибок нет, используйте вместо этого HTML-парсер. Например, когда элемент разбит на две строки

<div
>Lorem ipsum</div>

это регулярное выражение не будет работать.


Это регулярное выражение состоит из трех частей <, [^>]*, >

  • поиск открытия <
  • за которым следует ноль или более символов *, которые не являются закрывающими >
    [...] это класс символов, когда он начинается с ^ искать символы не в классе
  • и, наконец, искать закрытие >

Более простое регулярное выражение <.*> будет работать, потому что оно ищет самое длинное возможное совпадение, т.е. последнее закрытие > во входной строке. Например, когда у вас есть более одного тега в строке ввода

<name>Olaf</name> answers questions.

приведет к

отвечает на вопросы.

вместо

Олаф отвечает на вопросы.

См. Также " Повторение со звездами и плюсами", особенно в разделе "Остерегайтесь жадности"! и далее, для подробного объяснения.