Если я правильно понял ваш вопрос, и вы хотите удалить все внутри <script></script>
, я думаю, что вам нужно разделить sed на части (Вы можете сделать это одной строкой;):
Использование:
sed 's/<script>.*<\/script>//g;/<script>/,/<\/script>/{/<script>/!{/<\/script>/!d}};s/<script>.*//g;s/.*<\/script>//g'
Первый кусок (s/<script>.*<\/script>//g
) будет работать для них, когда в одной строке;
Второй раздел (/<script>/,/<\/script>/{/<script>/!{/<\/script>/!d}}
) - это почти цитата к ответу @akingokay,Единственное, что я исключил линии вхождения (на всякий случай, если у них есть что-то до или после).Отличное объяснение этого здесь Использование sed для удаления всех строк между двумя соответствующими шаблонами ;
Последние два (s/<script>.*//g
и s/.*<\/script>//g
) наконец-то позаботятся о строках, которые начинаются ине заканчивайте или не начинайте и не заканчивайте.
Теперь, если у вас есть index.html, который имеет:
<html>
<body>
foo
<script> console.log("bar) </script>
<div id="something"></div>
<script>
// Multiple Lines script
// Blah blah
</script>
foo <script> //Some
console.log("script")</script> bar
</body>
</html>
, и вы запустите эту команду sed, вы получите:
cat index.html | sed 's/<script>.*<\/script>//g;/<script>/,/<\/script>/{/<script>/!{/<\/script>/!d}};s/<script>.*//g;s/.*<\/script>//g'
<html>
<body>
foo
<div id="something"></div>
foo
bar
</body>
</html>
Наконец, у вас будет много пустых мест, но код должен работать так, как ожидалось.Конечно, вы также можете легко удалить их с помощью sed.
Надеюсь, это поможет.
PS: Я думаю, что @ l0b0 - это правильно, и это не правильный инструмент.