LINUX.ORG.RU

Поиск и замена SED

 ,


0

2

Хочу удалить все скрипты в файлах html не могу подобрать правильный вариант строчки

само регулярное выражение <script[\w\W]*?</script>

вот как оно смотрится в строке по моим соображениям:

find . -type f -name «*.html» -exec sed -i 's/<script[\w\W]*?</script>//g' {} \;

так же я пробовал его по всякому экранировать вплоть до:

\<script\[\\w\\W\]\*\?\<\/script\>

нифига не срабатывало

правда нашел такой вариант в интернете

find -type f -name \*.html | xargs sed -i '/\<script/,/\<\/script\>/c\ '

но он сразу всё содержимое страницы вырезает от первого скрипта до последнего, а нужно только сами скрипты удалить



Последнее исправление: Canapsis (всего исправлений: 1)

Может такое сработает, а может и нет (зависит от содержимого):

find . -type f -name '*.html' -exec sed -i 's/<script[^>]*>[^<]*</script>//g' {} \;

perl умеет в non-greedy (perl -pe 's/<script[\w\W]*?<\/script>//g'), но не знаю, как его заставить обрабатывать файлы.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

но не знаю, как его заставить обрабатывать файлы.

Так же, как sed: perl -pi -e s/<script[\w\W]*?<\/script>//g' bla-bla-bla. См. perldoc perlrun.

dexpl ★★★★★
()

Нашел решение

find . -type f -name «*.html» -exec perl -0 -i -pe 's/<script.*?script>//gs' {} \;

Canapsis
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.