我正在尝试遍历文件并删除不需要的行。文件中的行具有不会更改的唯一编号。到目前为止,我没有删除foreach循环中的行,而是单独删除它。
$FSEFiles=get-childitem E:\FSE*.txt
foreach ($file in $FSEFiles)
{
try
{
(Get-Content $file.PSPath) |
Foreach-Object { Where-Object { $_ -notmatch "15987@" } } |
Foreach-Object { Where-Object { $_ -notmatch "16422@" } } |
#Foreach-Object {Where-Object { $_ -notmatch "17526@"}} |
#Foreach-Object {Where-Object { $_ -notmatch "17527@"}} |
#Foreach-Object {Where-Object { $_ -notmatch "17528@"}} |
#Foreach-Object {Where-Object { $_ -notmatch "17530@"}} |
#Foreach-Object {Where-Object { $_ -notmatch "17531@"}} |
#Foreach-Object {Where-Object { $_ -notmatch "17532@"}} |
Set-Content $file.PSPath
write-host $file updated
}
catch
{
write-host Error editing $file
}
}
我是否错过了允许此循环在每一行上运行的内容?
答案 0 :(得分:3)
由于您已经在使用正则表达式,因此可以将所有这些要求合并到一个漂亮的正则表达式字符串
中$regex = "(15987@|16422@|1752[6-8]@|1753[0-2]@)"
$data = Get-Content $file.PSPath
$data | Where-Object{$_ -notmatch $regex} | Set-Content $file.PSPath
也许类似的东西会流水线。没有真正测试但应该工作。你可能已经采取了哪些措施,但foreach
和where
的结合似乎有些不合适(因此问题),但尝试解决我想的问题是多余的。