Манипулирование текстом: как исключить определенные строки с помощью sed
currelty я заменяю все <
во всем содержании со следующим sed
команда
sed -e 's/\</</g''
но теперь я должен исключить строки, содержащие <title>
а точнее я должен исключить текст между <title>
а также </title>
например. следующая строка соответствует моей команде, но эту строку следует исключить...
<title>BEWEGUNGSBOX der ÖDG ab sofort < erhältlich </title>
как я могу решить это с помощью sed? я использую sed в cygwin
2 ответа
Мне не нравится идея использования sed
обрабатывать данные HTML. Но сказал это, попробуйте это:
sed -ne '/<title>.*<\/title>/ { p; b }; /<title>/,/<\/title>/ { p; b }; s/\</</g; p' infile
Это выглядит для <title>...</title
с обоими тегами в одной строке и печатает его без изменений. В противном случае ищите эти теги в разных строках, используя диапазон. С того момента, когда одно из предыдущих условий не выполняется, начинайте заменять <
,
Чтобы сделать подстановку только в теле документа, вы можете использовать диапазоны регулярных выражений в sed:
sed -e '/<body/,/<\/body/ s/\</</g' input.htm