0

以下のようなテキストファイルがあります。

    04Jul@15:08 ERROR: The Ticket and Load data do not match: NUM[MXS035] 
    04Jul@15:14 No data for MXS035
    04Jul@15:14 Ticket = [MXS035]
    04Jul@15:39 Ticket = [ABC077]
    04Jul@16:14 gNoRcomp = [72]
    04Jul@16:14 Test lines 12345
    04Jul@16:14 gNoRcomp = [72]
    04Jul@16:14 test file content not displayed
    MU: module rpt3.cpp, line 8652
    Database 0
    Communications 0

変数を使用して、特定の日付のテキスト ファイル 04Jul の共通部分をキャプチャする $date 値を作成しました。

    $date_value=Get-date -Format ddMMM

$date_value の値を表示すると、04Jul が表示されます。テキスト ファイル内のパターンを検索する必要があります。このパターンは、日付が共通で、ワーキング チケットが共通です。行の残りの値が変更されます。

例 :

以下の行をキャプチャする必要があります。

    04Jul@15:14 Ticket = [MXS035]
    04Jul@15:39 Ticket = [ABC077]

これには、変数 $date_value@ に既にキャプチャされている 04Jul があり、時間フィールドが変更され、" Ticket = [" が再び一般的になり、次の 6 文字が変更され、最後の ] が一般的であり、変更されません。

したがって、要件は

    $date_value@......Ticket=[......]

上記の部分は、キャプチャする必要があるテキスト ファイルの行で共通です。

以下の選択文字列を試しましたが、機能しません。

    select-string -pattern "$date_value@\d+:\d+ Ticket = [[]ABCDEF[]]" test.txt

何か提案はありますか?

4

3 に答える 3

1

角括弧内の参照を探している正規表現の部分を修正する必要があります。

正規表現構文で特別な意味を持つ文字を探したい場合は、最初にバックスラッシュ文字を使用してエスケープする必要があります。たとえば、左角括弧をエスケープするには \[ です (実際、これを入力するには、バックスラッシュ自体をエスケープする必要がありました2回入力することによって)

以下の作品:

select-string -pattern "$date_value@\d+:\d+ Ticket = \[[A-Za-z]{3}\d{3}\]" test.txt

したがって、角括弧内の参照までは問題ありませんでした。ここで行ったことは、左角かっこ、大文字または小文字の 3 文字、3 桁の数字、最後に右角かっこを検索するように指示しています。

私のテストでは、提供されたコンテンツを使用したファイルを使用して、次の結果が返されました。

test.txt:3:04Jul@15:14 Ticket = [MXS035]
test.txt:4:04Jul@15:39 Ticket = [ABC077]

...これは、ファイル名、一致した行番号、および行の内容を示します。

さらにヘルプが必要な場合は、Powershell コマンド ウィンドウまたは ISE GUI で次のように入力します。help about_regular_expressions

于 2013-07-04T11:47:45.713 に答える
1

あなたのパターンでは、 に変更[[]ABCDEF[]]\[[A-Z]{3}[0-9]{3}\]て、3 つの大文字とその後に続く 3 つの数字で構成されるチケット番号に一致するようにします。

$date_value = Get-date -Format ddMMM
Select-String "$date_value@\d+:\d+ Ticket = \[[A-Z]{3}[0-9]{3}\]" test.txt

test.txtこれにより、質問のサンプルコンテンツを含むファイルで使用すると、次の出力が得られます。

test.txt:3:04Jul@15:14 Ticket = [MXS035]
test.txt:4:04Jul@15:39 Ticket = [ABC077]
于 2013-07-04T11:21:05.710 に答える