我有一个如下所述的文本文件:
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]
这已经在变量$ date_value @中捕获了04Jul,并且时间字段发生了变化,“Ticket = [”再次变为常见,接下来的6个字符发生了变化而最后一个变为常见而且没有变化。
所以要求是
$date_value@......Ticket=[......]
上述部分在需要捕获的文本文件行中很常见。
我尝试了以下选择字符串,但无效。
select-string -pattern "$date_value@\d+:\d+ Ticket = [[]ABCDEF[]]" test.txt
任何建议都有效吗?
答案 0 :(得分: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"
答案 1 :(得分: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]
答案 2 :(得分: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