15

在 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/)"

如何去掉结果中的输出文件路径名、输出文件名和冒号?

4

6 回答 6

29

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
于 2015-07-05T18:23:57.270 回答
11

与往常一样,powershell 将事物作为对象返回,默认情况下 select-string 返回几个属性,包括 LineNumber、Filename 等;你想要的数据就是所谓的“线”。所以不需要任何花哨的东西,只需将它传送到“选择行”。

例如:

Select-String "bla" filename.txt | select-object -ExpandProperty Line | out-file E:\bla_text.txt
于 2016-05-31T15:19:40.753 回答
1

如果您正在寻找(子)字符串而不是模式,-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'
于 2015-07-05T19:23:27.897 回答
0
Get-Content E:\Documents\combined0.txt | Select-String -Pattern "GET /ccsetup\.exe" -AllMatches
于 2017-05-30T23:23:22.267 回答
0
# 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
}
于 2019-04-24T13:36:32.640 回答
0

我发现了这一点,并想要一种更简单的方法来过滤掉确切的文本。我在“Select-String -Path C:\Temp\AccountLockoutPolicy.Txt -Pattern 'ResetLockoutCount ='”末尾使用了“| select-object -ExpandProperty Line”,它删除了路径和行号。我喜欢简单!

于 2020-10-08T16:06:55.317 回答