Powershell select-字符串匹配文件和输出文件名中的第一个实例
Powershell select-string match first instance in file and output filename
我有一些由 IMAPSync 进程生成的日志文件。每个邮箱都有一个已同步的日志文件。
我需要识别所有具有特定字符串的日志文件。
目前我有
Get-ChildItem -Filter *.txt | select-string 'Quota exceeded'
这会尽职尽责地打印出包含此字符串的所有行,这些行可能会在日志文件中多次出现。当脚本遇到第一个匹配项并转到下一个项目并仅打印文件名时,我想要的脚本 'stop'。
例如如果我有 3 个文件:
Fu.txt
Bar.txt
Baz.txt
每行有 10,000 行,在 Bar.txt 中有 3,000 行有 'Quota Exceeded' - 我只想从脚本中输出:
Bar.txt
与目前相反,我有一个 shell window 充满了结果。
使用 switch
和 -File
参数可能比 Select-String
更有效,例如,如果通配符模式 匹配一次然后继续下一个文件。
Get-ChildItem -Filter *.txt -PipelineVariable dir | ForEach-Object {
switch -Wildcard -File ($_.FullName) {
'*Quota exceeded*' { return $dir.FullName }
}
}
对 Select-String
使用 -List
参数也可能是一个很好的可能性,但我倾向于上面的例子。
-List
每个输入文件仅返回匹配文本的第一个实例。这是检索内容与正则表达式匹配的文件列表的最有效方法。
(Select-String -Path *.txt -SimpleMatch -List -Pattern 'Quota exceeded').Path
我有一些由 IMAPSync 进程生成的日志文件。每个邮箱都有一个已同步的日志文件。
我需要识别所有具有特定字符串的日志文件。
目前我有
Get-ChildItem -Filter *.txt | select-string 'Quota exceeded'
这会尽职尽责地打印出包含此字符串的所有行,这些行可能会在日志文件中多次出现。当脚本遇到第一个匹配项并转到下一个项目并仅打印文件名时,我想要的脚本 'stop'。
例如如果我有 3 个文件:
Fu.txt
Bar.txt
Baz.txt
每行有 10,000 行,在 Bar.txt 中有 3,000 行有 'Quota Exceeded' - 我只想从脚本中输出:
Bar.txt
与目前相反,我有一个 shell window 充满了结果。
使用 switch
和 -File
参数可能比 Select-String
更有效,例如,如果通配符模式 匹配一次然后继续下一个文件。
Get-ChildItem -Filter *.txt -PipelineVariable dir | ForEach-Object {
switch -Wildcard -File ($_.FullName) {
'*Quota exceeded*' { return $dir.FullName }
}
}
对 Select-String
使用 -List
参数也可能是一个很好的可能性,但我倾向于上面的例子。
-List
每个输入文件仅返回匹配文本的第一个实例。这是检索内容与正则表达式匹配的文件列表的最有效方法。
(Select-String -Path *.txt -SimpleMatch -List -Pattern 'Quota exceeded').Path