2016-10-25 6 views
0

Я пытаюсь прочитать большой файл журнала данных, в папку C: \ log \ 1 \ i положить 2 txt-файла, мне нужно открыть-> прочитать весь файл .txt и найти с фильтром текста как whis: [текст]Прочтите файл txt в папке и введите текст по образцу

# Filename: script.ps1 


$Files = Get-ChildItem "C:\log\1\" -Filter "*.txt" 
foreach ($File in $Files) 
{ 
    $StringMatch = $null 
    $StringMatch = select-string $File -pattern "[Error]" 
    if ($StringMatch) {out-file -filepath C:\log\outputlog.txt -inputobject $StringMatch} 
} 
    # end of script 
не

работы

+0

Возможно дубликата [ 'Grep' в PowerShell 1.0] (HTTP: // stackoverflow.com/questions/11113113/grep-in-powershell-1-0) – TessellatingHeckler

ответ

0

будет делать что-то вроде выбора струн работы?

Select-String C:\Scripts\*.txt -pattern "SEARCH STRING HERE" | Format-List 

Или, если есть несколько файлов, которые вы желаете, чтобы разобрать, возможно, использовать один и тот же Select-String, но внутри цикла и вывода результатов.

$Files = Get-ChildItem "C:\log\1\" -Filter "*.txt" 
foreach ($File in $Files) 
{ 
    $StringMatch = $null 
    $StringMatch = select-string $File -pattern "SEARCH STRING HERE" 
    if ($StringMatch) {out-file -filepath c:\outputlog.txt -inputobject $StringMatch} 
} 
+0

В папке несколько файлов txt, эти файлы мне нужно найти ДВА ЛИНИИ: [Ошибка] и [Файл] (обязательные скобки) –

0

Это напечатает имя файла вместе с номером строки в файле. Надеюсь, это то, что вы ищете.

Remove-Item -Path C:\log\outlog.txt 
$Files = Get-ChildItem "C:\log\1\" -Filter "*.txt" 
foreach ($File in $Files) 
{ 
    $lineNumber = 0 
    $content = Get-Content -Path "C:\log\1\$File" 
    foreach($line in $content) 
    { 
     if($line.Contains('[Error]')) 
     { 
      Add-Content -Path C:\log\outlog.txt -Value "$File -> $lineNumber" 
     } 
     $lineNumber++ 
    } 
} 
0

Код ниже работает

Он выбирает строки в текстовых файлах в папке на основе -SimpleMatch, а затем присоединяет его к new.txt файла.

Хотя я не знаю, как поставить два простых совпадения в одной строке. Может быть, кто-то и может разместить его здесь

Select-String -Path C:\log\1\*.txt -SimpleMatch "[Error]" -ca | select -exp line | out-file C:\log\1\new.txt -Append 
Select-String -Path C:\log\1\*.txt -SimpleMatch "[File]" -ca | select -exp line | out-file C:\log\1\new.txt -Append 

С уважением

----- ----- редактировать

Если вы хотите, чтобы вам не добавлять его в любом месте только дисплей - просто DonT труба его из-файла

0

использовать индекс затем проверить его:

New-Item C:\log\outputlog.txt 
$Files = Get-ChildItem "C:\log\1\" -Include "*.txt" 
foreach ($File in $Files) 
{ 

    $StringMatch = $null 
    $StringMatch = Get-Content $File 
    if($StringMatch.IndexOf("[Error]") -ne -1) 
    { 
     Add-Content -Path C:\log\outputlog.txt -Value ($StringMatch+" 
     ------------------------------------------------------------- 
     ") 
    } 
} 
    # end of script