Манипулирование текстом: как исключить определенные строки с помощью sed

currelty я заменяю все < во всем содержании со следующим sed команда

sed -e 's/\&lt;/</g''

но теперь я должен исключить строки, содержащие <title> а точнее я должен исключить текст между <title> а также </title>

например. следующая строка соответствует моей команде, но эту строку следует исключить...

 <title>BEWEGUNGSBOX der ÖDG ab sofort &lt; erhältlich </title>

как я могу решить это с помощью sed? я использую sed в cygwin

2 ответа

Мне не нравится идея использования sed обрабатывать данные HTML. Но сказал это, попробуйте это:

sed -ne '/<title>.*<\/title>/ { p; b }; /<title>/,/<\/title>/ { p; b }; s/\&lt;/</g; p' infile

Это выглядит для <title>...</title с обоими тегами в одной строке и печатает его без изменений. В противном случае ищите эти теги в разных строках, используя диапазон. С того момента, когда одно из предыдущих условий не выполняется, начинайте заменять &lt;,

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

sed -e '/<body/,/<\/body/ s/\&lt;/</g' input.htm
Другие вопросы по тегам