脚本删除多行html代码

时间:2015-12-01 12:56:53

标签: regex powershell

我需要从许多文件中删除相同的html代码。我试着编写一个PowerShell脚本,但它没有用。

$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。它需要在Windows上工作

2 个答案:

答案 0 :(得分:1)

同意使用here-string,但您正在进行多行替换。这意味着您需要将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
 }

答案 1 :(得分:0)

尝试使用here-string而不是插入转义的特殊字符,这可能会破坏您的正则表达式匹配。

<myproject.dll>

当然,只有在每个文件中使用完全相同的格式时,它才会起作用。