从输出中删除路径
Remove path from output
在 PowerShell 中使用以下 Select-String
命令:
Select-String -Path E:\Documents\combined0.txt -Pattern "GET /ccsetup\.exe" -AllMatches > E:\Documents\combined3.txt
创建一个输出文件,每行以路径和文件名开头,后跟一个冒号。例如:
E:\Documents\combined0.txt:255:255.255.255 - - [31/Dec/2014:04:15:16 -0800] "GET /ccsetup.exe HTTP/1.1" 301 451 "-" "Mozilla/5.0 (compatible; SearchmetricsBot; http://www.xxxx.com/en/xxxx-bot/)"
如何去掉结果中的输出文件路径名、输出文件名和冒号?
Select-String
输出一个对象,您可以从中选择所需的属性。 Get-Member
命令将向您显示这些对象成员,如果您通过管道输入它,例如:
Select-String -Path E:\Documents\combined0.txt -Pattern "GET /ccsetup\.exe" -AllMatches |
Get-Member
其中一个属性是 Line
。所以试试这样:
Select-String -Path E:\Documents\combined0.txt -Pattern "GET /ccsetup\.exe" -AllMatches |
Foreach {$_.Line} > E:\Documents\combined3.txt
如果您正在寻找(子)字符串而不是模式,使用 -like
运算符可能是更好的方法,在性能方面和易用性方面。
$searchString = 'GET /ccsetup.exe'
Get-Content 'E:\Documents\combined0.txt' |
? { $_ -like "*$searchString*" } |
Set-Content 'E:\Documents\combined3.txt'
如果确实需要模式匹配,可以轻松地将 -like
运算符替换为 -match
运算符:
$pattern = 'GET /ccsetup\.exe'
Get-Content 'E:\Documents\combined0.txt' |
? { $_ -match $pattern } |
Set-Content 'E:\Documents\combined3.txt'
像往常一样powershell returns things as objects, 默认 select-string returns 几个属性包括LineNumber, Filename等;您想要的带有数据的那个叫做 "Line"。所以不需要任何花哨的东西,只需将其通过管道传输到 "select line".
例如:
Select-String "bla" filename.txt | select-object -ExpandProperty Line | out-file E:\bla_text.txt
Get-Content E:\Documents\combined0.txt | Select-String -Pattern "GET /ccsetup\.exe" -AllMatches
# define your search path
$files = Get-ChildItem "./some_path"
for ($i=0; $i -lt $files.Count; $i++) {
# loop through files in search folder
$x=Select-String -Path $files[$i].FullName -Pattern "whatYouSearch"
# retrieve the info with the option Line
$out=$x.Line
# echo to output file (append)
$out >> result.csv
}
我找到了这个并且想要一种更简单的方法来过滤出确切的文本。我在“Select-String -Path C:\Temp\AccountLockoutPolicy.Txt -Pattern 'ResetLockoutCount ='”的末尾使用了“| select-object -ExpandProperty Line”,它删除了路径和线数字。我喜欢简单!
优雅的解决方案:
PS> type .\test.txt
abc
abc123
xyz
xyz123
PS> $(Select-String "123" .\test.txt).Line
abc123
xyz123
在 PowerShell 中使用以下 Select-String
命令:
Select-String -Path E:\Documents\combined0.txt -Pattern "GET /ccsetup\.exe" -AllMatches > E:\Documents\combined3.txt
创建一个输出文件,每行以路径和文件名开头,后跟一个冒号。例如:
E:\Documents\combined0.txt:255:255.255.255 - - [31/Dec/2014:04:15:16 -0800] "GET /ccsetup.exe HTTP/1.1" 301 451 "-" "Mozilla/5.0 (compatible; SearchmetricsBot; http://www.xxxx.com/en/xxxx-bot/)"
如何去掉结果中的输出文件路径名、输出文件名和冒号?
Select-String
输出一个对象,您可以从中选择所需的属性。 Get-Member
命令将向您显示这些对象成员,如果您通过管道输入它,例如:
Select-String -Path E:\Documents\combined0.txt -Pattern "GET /ccsetup\.exe" -AllMatches |
Get-Member
其中一个属性是 Line
。所以试试这样:
Select-String -Path E:\Documents\combined0.txt -Pattern "GET /ccsetup\.exe" -AllMatches |
Foreach {$_.Line} > E:\Documents\combined3.txt
如果您正在寻找(子)字符串而不是模式,使用 -like
运算符可能是更好的方法,在性能方面和易用性方面。
$searchString = 'GET /ccsetup.exe'
Get-Content 'E:\Documents\combined0.txt' |
? { $_ -like "*$searchString*" } |
Set-Content 'E:\Documents\combined3.txt'
如果确实需要模式匹配,可以轻松地将 -like
运算符替换为 -match
运算符:
$pattern = 'GET /ccsetup\.exe'
Get-Content 'E:\Documents\combined0.txt' |
? { $_ -match $pattern } |
Set-Content 'E:\Documents\combined3.txt'
像往常一样powershell returns things as objects, 默认 select-string returns 几个属性包括LineNumber, Filename等;您想要的带有数据的那个叫做 "Line"。所以不需要任何花哨的东西,只需将其通过管道传输到 "select line".
例如:
Select-String "bla" filename.txt | select-object -ExpandProperty Line | out-file E:\bla_text.txt
Get-Content E:\Documents\combined0.txt | Select-String -Pattern "GET /ccsetup\.exe" -AllMatches
# define your search path
$files = Get-ChildItem "./some_path"
for ($i=0; $i -lt $files.Count; $i++) {
# loop through files in search folder
$x=Select-String -Path $files[$i].FullName -Pattern "whatYouSearch"
# retrieve the info with the option Line
$out=$x.Line
# echo to output file (append)
$out >> result.csv
}
我找到了这个并且想要一种更简单的方法来过滤出确切的文本。我在“Select-String -Path C:\Temp\AccountLockoutPolicy.Txt -Pattern 'ResetLockoutCount ='”的末尾使用了“| select-object -ExpandProperty Line”,它删除了路径和线数字。我喜欢简单!
优雅的解决方案:
PS> type .\test.txt
abc
abc123
xyz
xyz123
PS> $(Select-String "123" .\test.txt).Line
abc123
xyz123