我正在尝试使用PowerShell过滤文件,我需要在</tr><tr>
之间插入一个新行字符,将它们分成不同的行,然后删除所有匹配<tr>
多个字符的行BTE
多个字符</tr>
并保存文件。
原谅我,因为我是PowerShell的新手,这在SED中很简单,但我必须使用PowerShell。这就是我所拥有的,但可能是完全错误的。
Get-Content *.htm | Foreach-Object {$_ -replace '</tr><tr>', '</tr>\r\n<tr>'; $_}f
Get-Content *.htm | Foreach-Object {$_ -replace '<tr>.*BTE.*</tr>', ''; $_}
答案 0 :(得分:1)
所以听起来你需要将更改保存回原始文件。此外,我们应该只能在一次通过中进行这些更改,而不是两次读取文件。
Get-ChildItem *.htm | Foreach-Object {
$singleFileName = $_.FullName
(Get-Content $singleFileName) -replace '</tr><tr>', "</tr>`r`n<tr>" -replace '<tr>.*BTE.*</tr>' | Set-Content $singleFileName
}
您无法读取和写入管道中的同一文件。我们将(Get-Content $singleFileName)
放在括号中,以便立即读取整个文件。
Get-Content $singleFileName | Set-Content $singleFileName
当每一行传递到管道时,文件保持打开状态,以便Set-Content
无法写入。
答案 1 :(得分:0)
如果RegEx能够捕获这样的组,我认为你不必插入换行符。
Get-ChildItem *.htm | Foreach-Object {
$singleFileName = $_.FullName
([RegEx]::Matches((Get-Content $singleFileName),'<tr>.*?</tr>')).Value|?{$_ -notlike '<tr>*BTE*</tr>'} | Set-Content $singleFileName
}