为什么以下脚本生成的输出文件不包含原始文件中包含的所有行?我在逐行级别上做替换逻辑,但我并没有明确删除任何行。
[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
输入文件
输出文件
答案 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