2017-09-08 1 views
1

特定の文字列のログファイルを調べ、後で使うために変数の最後のインスタンスのみを返すようにしています。powershellを使用している文字列の最終一致を検索する

ログの例:

09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo AppVersion   [RA 4.0.560] 
09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo OSVersion   [L5x-OS-v00.00-20170000-0] 
09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo PackingListVersion [0001] 
09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo TerminalName  [LXXXX_PCI3] 
09/07/17 16:28:17.300 TCP/IP Terminal.GetVersionInfo AppVersion   [RA 4.0.561] 

だけのappversionの最後の結果は、私が返すようにしたいものです。

[RA 4.0.561]

EDIT:

私は各行をループして結果を配列に入れようとしましたが、配列は私に奇妙な結果を与えています:

$results = @() 
foreach ($line in $logfile) { 
    $hits = [regex]::match($line,'\[RA.\d.*]') 
    $results += $hits.Value 
} 
$results 
+2

コードの例とそれに付随している問題の例を挙げることができますか? –

+0

元の投稿をいくつかの失敗したコードで更新しました。 – eboth225

答えて

1

LotPings' answer有望であるが、それを行うための簡単な方法は、補助を必要とせずに、あります。変数:

Select-String ' AppVersion\s+(\[.+?\])' $logfile | 
    Select-Object -Last 1 | 
    ForEach-Object { $_.Matches[0].Groups[1].Value } 

定義によって、せいぜい1つの試合があるだろうことを考えると、我々はまた、行うことができます:

(Select-String ' AppVersion\s+(\[.+?\])' $logfile | Select-Object -Last 1). 
    Matches[0].Groups[1].Value 

最後の一つを選択する前に、まずメモリ内のすべての一致を収集した場合には、実現可能である。

(Select-String ' AppVersion\s+(\[.+?\])' $logfile)[-1].Matches[0].Groups[1].Value 
0

多分次の行に沿って、テキストを単一の項目に分割し、逆の順序で検索することがありますか?

$rawStr = cat $logfile //read logfile to variable 
$list = $rawStr.split("`n") //split text at newlines 
[array]::Reverse($list) //reverse list 
$list | % {if ($_ -match "AppVersion") { echo $_; break } } 
+0

'Get-Content'はデフォルトで文字列の配列としてファイルを読み込みます。新しい行を分割する必要はありません。最後の行を行うもっとエレガントな方法は '$ list |どこの{$ _ -match 'AppVersion \ s +(\ [。*])'} | ForEach {$ Matches [1];ブレーク} 'それはちょうど' [RA 4.0.561] 'を返すべきです。 – TheMadTechnician

+0

Macで作業していたので、最初の部分をテストすることができませんでした - 明確化のためにありがとう。それははるかにクリーンですが、PowerShellで非常に多くのことができます。非常にクール、歓声。 – 0x11

1
Select-String -Path $logfile -Pattern 'AppVersion\s+(\[.+\])' -Allmatches| 
    ForEach-Object{$Result=$_.Matches.Groups[1].Value} 
$Result 

出力例:

[RA 4.0.561] 
+0

有望ですが、 '-AllMatches'は複数のマッチに対してのみ必要です。 – mklement0

関連する問題