Powershell输出文件缺少输入文件中的行

时间:2014-09-25 22:20:08

标签: powershell powershell-v2.0

为什么以下脚本生成的输出文件不包含原始文件中包含的所有行?我在逐行级别上做替换逻辑,但我并没有明确删除任何行。

[regex]$r = "\$\%\$@@(.+)\$\%\$@@";

(Get-Content $inputFile) | 
    Foreach-Object {
        $line = $_;
        $find = $r.matches($line);

        if ($find[0].Success) {
            foreach ($match in $find) {
                $found = $match.value           
                $replace = $found -replace "[^A-Za-z0-9\s]", "";            
                $line.Replace($found, $replace);
            }       
        }
    } | 
Set-Content $outputFile

输入文件

Input File

输出文件

Output File

1 个答案:

答案 0 :(得分:1)

如果找到匹配项,您只需将内容输出到管道:

$line.Replace($found, $replace)

如果找不到匹配项,则需要输出该行而不进行任何替换:

[regex]$r = "\$\%\$@@(.+)\$\%\$@@";

(Get-Content $inputFile) | 
    Foreach-Object {
        $line = $_;
        $find = $r.matches($line);

        if ($find[0].Success) {
            foreach ($match in $find) {
                $found = $match.value           
                $replace = $found -replace "[^A-Za-z0-9\s]", "";            
                $line.Replace($found, $replace);
            }       
        }

        Else { $line }

    } | 
Set-Content $outputFile