2017-11-03 62 views
0

正規表現でいくつかのテキストファイルを検索しようとしています。正規表現が1行でマッチしたときに動作させることができましたが、ある行と別の行の終わりにマッチする正規表現でテストすると、動作しません。PowerShellで複数行の正規表現を使用して複数のテキストファイルをループする

私は、ファイル全体を変数/配列に読み込んだ後、正規表現検索を行う必要があることを読んだことがあります。私はこれをうまく動作させることはできませんでした。

フォルダとファイルの構造が

 
Root Folder 
├─17-11-01 
│ ├─trace-0.log 
│ └─trace-1.log 
└─17-11-02 
    ├─trace-0.log 
    └─trace-1.log 

ている私は、ファイルのフルパスを取得するために管理しているが、私は、ファイルの内容を読み取るかどうかはわかりません。 [IO.File]::ReadAllText($Path)が見つかりましたが、下のコマンドにどのように追加するのかはわかりません。

Get-ChildItem $Path -Filter $Filter -Recurse | 
    Select FullName | 
    ft -HideTableHeaders 

私が何をしようとしているのかをまとめます。

  • 一致するテキストが複数の行にまたがる正規表現検索を行います。
  • 同じルートの複数のパスに複数のファイルがあります。
  • 各正規表現の一致をカウントします。

私は現在Windows上でPowerShell v2を使用しています  7しかし、私はv4にアップグレードできます。このスクリプトは、ほとんどの場合、Windows   10およびWindows Server 2012   R2以降で使用されます。

編集1 ここでは、ログファイルと正規表現の例を示します。

 
FINER: Entering service: ABC 
2017-11-03T08:22:18.557+0100 - INFO: Some info. 
2017-11-03T08:22:18.557+0100 - INFO: Some info. 
2017-11-03T08:22:18.557+0100 - INFO: Some info. 
2017-11-03T08:22:18.557+0100 - INFO: Some info. 
2017-11-03T08:22:18.557+0100 - INFO: Some info. 
2017-11-03T08:22:18.557+0100 - INFO: Some info. 
2017-11-03T08:22:18.557+0100 - INFO: The request has been completed. 
(2017-10-.*FINER\: Entering service: (ABC |ABC1|ABC2))[\s\S]*?(INFO: \d\d\d\d\d\d\d\d\d\d\d\d The request has been completed) 
+0

ファイルを変数に格納します。なぜあなたはonelinerコマンドを取得しようとしますか? – guiwhatsthat

+0

@guiそれは私がonelinerでする必要はありません。コマンドを分割することで、より多くの行をテストしました。 – ChristofferL

+0

最初に[iO.File] :: ReadAllLines()でログを読み、すべての行をループし、正規表現検索 – guiwhatsthat

答えて

1

編集2ソリューション

ここで最終的なコードです。私の例の正規表現は、サンプルログと一致しませんでした。

$Files = (Get-ChildItem $Path -Filter $FilterFile -Recurse | Get-Content | Out-String) 

(Select-String -inputObject $Files -pattern $Regex -AllMatches).Matches.Count 

表現はうまくいきましたが、それは問題ではありませんでした。

ありがとうございます!

関連する問題