我正在尝试构建一个PowerShell脚本,它遍历文件和搜索列表并删除匹配,没有太多运气,这是我的脚本
$path = "D:\Test\"
$filter = "*.txt"
$files = Get-ChildItem -path $path -filter $filter
foreach ($item in $files)
{
$search = Get-content -path $path$item
$search| select-string -pattern "T|"
}
目前,脚本只返回文件的整个内容而不是选择字符串。
基本上文件夹中的每个文件都有一个尾部记录,即T|1410
我需要遍历所有文件并删除最后一行,其中一些文件将是200mb +有人可以指导我。
我已经编辑了我的脚本,现在我正在使用以下方法。
$path = "D:\Test\"
$filter = "*.txt"
$files = Get-ChildItem -path $path -filter $filter
foreach ($item in $files)
{
$search = Get-content $path$item
($search)| ForEach-Object { $_ -replace 'T\|[0-9]*', '' } | Set-Content $path$item
}
我正在使用Powershell v.2
但是,这是在我的文件末尾添加一个新的空行以及将替换为空,我怎样才能避免这种情况以及从底部开始搜索
答案 0 :(得分:2)
-pattern "T|"
该模式匹配" T"或无。但是任何字符串中的每对字符之间都没有任何内容。要避免将|
作为替换分隔符进行常规正则表达式处理,请使用反斜杠来匹配文字|
:
-pattern "T\|"
或者,使用Select-String
' -SimpleMatch
切换来停止将-Pattern
作为正则表达式处理的参数。
答案 1 :(得分:2)
答案 2 :(得分:1)
除了转义字符外,您可以使用的另一个选项是-SimpleMatch
开关。来自TechNet
使用简单匹配而不是正则表达式匹配。在简单匹配中,Select-String在输入中搜索Pattern参数中的文本。它不会将Pattern参数的值解释为正则表达式语句。
如果你不想担心逃避角色并且不使用正则表达式,那么这就是你要走的路。
$search | select-string -pattern "T|" -SimpleMatch