Powershell - 正则表达式,替换和保存文件

时间:2016-04-21 07:11:24

标签: regex powershell replace match

在一堆SVG文件(同一个文件夹)中,我需要删除第一个 3 甚至更好 start-tag <svg ...

之前的所有内容

然后我有<a> - 像这样的标签:

<a xlink:href="1">

所有这些出现都应该以这种方式替换:

<a onClick="top.getLink(1)">

然后使用这些更改覆盖相应的文件。

在Notepad ++中,这种搜索和替换a-Tag的模式有效:

<a xlink:href\="(.*)">

我可以用它替换它以获得所需的输出:

<a onClick="top.getLink\(($1)\)">

但是在Powershell中,我不太了解正则表达式或一般语法,以便将其解除。 我们的想法是重复运行这个PowerShell脚本,理想情况下忽略以前处理过的文件。

你能告诉我一个如何做到这一点的例子吗?

谢谢。

3 个答案:

答案 0 :(得分:0)

使用-replace:

,使用适当的regEx解决问题的代码如下所示
    $yourText = '<a onClick="top.getLink(1)">'

    $yourText -replace '<a xlink:href\="(.*)">','<a onClick="top.getLink\(($1)\)">'

尝试一下,如果这有助于您的情况,请告诉我们。

答案 1 :(得分:0)

这对我有用:谢谢。

$regex = '<a xlink:href\="(.*)">'
$replace ='<a onClick="top.getLink($1)>'

$file = "C:\temp\abc.svg"
$firstLine = Get-Content $file -First 1

    if($firstLine -match '^<\?xml'){
    (Get-Content $file) | Select-Object -Skip 3 |
        Foreach-Object {$_ -replace $regex,$replace}  | 
        SET-Content $file
    }
    else{
    break;
    }

答案 2 :(得分:0)

一个选项:

(Get-Content $file -raw) -replace '.+?(<svg.+)','$1' -replace '<a xlink:href="1">','<a onClick="top.getLink(1)">' |
Set-Content $file