2015-12-01 4 views
0

Мне нужно удалить один и тот же код html из многих файлов. Я попытался написать сценарий powershell, но он не работает.Скрипт удаляет несколько строк HTML-кода

$htmlFiles = Get-ChildItem . *.html -rec 
$old = '<form method="GET" action="http://localhost/index.php" name="head2">`r`n 
       <input type="hidden" name="akcja" value="szukaj">`r`n 
       <input type="hidden" name="ind" value="0" >`r`n 
    `r`n 
       <table border="0" cellpadding="1" cellspacing="0" style="margin-left:11px" >`r`n 
        `r`n 
          SOME MORE CODE 
       `r`n 
       </table>`r`n 
      `r`n 
    </form>' 

$new = "" 

foreach ($file in $htmlFiles) 
{ 
    (Get-Content $file.PSPath) | 
    Foreach-Object { $_ -replace $old, $new} | 
    Set-Content $file.PSPath 
} 

Я использовал так много `r`n, потому что у меня это же в html-файлах. Может быть, мне нужно сделать это с помощью регулярного выражения, но регулярное выражение для более чем 50 строк слишком для меня. Я думаю, что скрипт не работает, потому что пробелы не совпадают. Как заставить его работать?

Мой скрипт работает, но не влияет на файлы ps. он должен работать на окнах

+0

Использование Html Agility пакет для такого рода работы: http://www.leeholmes.com/blog/2010/03/05/html-agility-pack-rocks-your-screen-scraping-world/ –

ответ

0

Попробуйте использовать here-string вместо того, чтобы вставлять экранированные специальные символы, которые, вероятно, испортит ваше соответствие регулярному выражению.

@' 
<form method="GET" action="http://localhost/index.php" name="head2"> 
    <input type="hidden" name="akcja" value="szukaj"> 
... 
</form> 
'@ 

Конечно, он будет работать только в том случае, если в каждом файле используется то же самое форматирование.

1

Согласитесь с использованием этой строки, но вы выполняете многострочную замену. это означает, что вам нужно получить свой HTML как одну многострочную строку и использовать многострочное регулярное выражение.

Это работает для вашего приложения?

$htmlFiles = Get-ChildItem . *.html -rec  

$regex = 
@' 
(?ms)\s*<form method="GET" action="http://localhost/index.php" name="head2">\s* 
.+? 
\s*</form>\s* 
'@ 
$new = '' 

foreach ($file in $htmlFiles) 
{ 
    (Get-Content $file.PSPath -raw) -replace $regex,$new | 
    Set-Content $file.PSPath 
} 
+0

нет никакого эффекта с этим скриптом;/ – Kamil

+0

Я пишу фрагмент всего кода с \ s * для пробелов, и это не заменило его. но когда я использую. * его работа, почему? – Kamil

Смежные вопросы