Ответ 1
$ cat text
abc
<!-- BOF CLEAN -->
... a bunch of stuff
<!-- EOF CLEAN -->
def
$ sed '/<!-- BOF CLEAN -->/,/<!-- EOF CLEAN -->/d' text
abc
def
http://www.catonmat.net/blog/sed-one-liners-explained-part-three/
У меня есть блок текста, который выглядит так:
<!-- BOF CLEAN -->
... a bunch of stuff
<!-- EOF CLEAN -->
Я хочу удалить весь этот блок. Что команда sed?
$ cat text
abc
<!-- BOF CLEAN -->
... a bunch of stuff
<!-- EOF CLEAN -->
def
$ sed '/<!-- BOF CLEAN -->/,/<!-- EOF CLEAN -->/d' text
abc
def
http://www.catonmat.net/blog/sed-one-liners-explained-part-three/
Чтобы удалить весь текст, начиная с <!-- BOF CLEAN -->
и включающий <!-- EOF CLEAN -->
и включающий <!-- EOF CLEAN -->
, используйте следующую команду sed:
sed -i '/<!-- BOF CLEAN -->/,/<!-- EOF CLEAN -->/d' file_name;
Ссылка: Удалить текст или абзац между двумя разделами с помощью sed
В эти дни я использую модификатор /s
, чтобы сделать это. Я заметил, что никто не упомянул это. Я использую разметку с свободным пространством, как
{bof-nf}... a bunch of stuff {eof-nf}
Так, например, чтобы удалить этот блок, используйте
$newcontent = preg_replace("/\{bof-nf\}(.*)\{eof-nf\}\\n/s", "", $newcontent);
Чтобы сохранить блок, но удалить теги, используйте
$newcontent = preg_replace("/\{bof-nf\}.*\\n/", "", $newcontent); $newcontent = preg_replace("/\{eof-nf\}.*\\n/", "", $newcontent);