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

我创建了一个 $date 值,它使用变量捕获特定日期的文本文件 04Jul 的公共部分

    $date_value=Get-date -Format ddMMM

当显示 $date_value 的 valye 时,我们得到 04Jul 我需要搜索文本文件中的模式,该模式具有常见的日期和常见的工作票......该行中的其余值发生变化。

例子 :

我需要捕获以下行:

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

这有 04Jul 已经在变量 $date_value@ 中捕获,并且时间字段发生了变化,“ Ticket = [”再次常见,接下来的 6 个字符发生变化,最后一个 ] 是常见的,不会改变。

所以要求是

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

上面提到的部分在需要捕获的文本文件行中很常见。

我尝试了下面的选择字符串但不工作。

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

请问有什么建议吗?

4

3 回答 3

1

您需要修改正则表达式中要在方括号中查找参考的部分。

如果您想在正则表达式语法中查找具有特殊含义的字符,您必须首先使用反斜杠字符转义它们,例如转义左方括号,它是 \[(实际上要输入这个,我必须转义反斜杠本身输入两次)

以下作品:

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

这是这样的字符串的正则表达式示例:“04Jul@15:14 Ticket = [MXS035]”

"04Jul@15:14 Ticket = [MXS035]" -Match "(\d{2}\w{3})@(\d{2}:\d{2})\sTicket\s=\s\[(\w*)\]"
$date = ($Matches[1] | Get-date -Format ddMMM)
$time = $Matches[2]
$ticket = $Matches[3]
$date, $time, $ticket

此代码将选择与模式匹配的所有字符串

Select-String -Pattern "(\d{2}\w{3})@(\d{2}:\d{2})\sTicket\s=\s\[(\w*)\]" test.txt

日期可变

$date_value='04Jul'
Select-String -Pattern $date_value+"@\d{2}:\d{2}\sTicket\s=\s\[\w*\]" "C:\test.txt"
于 2013-07-04T11:16:28.683 回答
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 回答