【发布时间】:2016-12-23 14:57:04
【问题描述】:
我有一个文本文件,其中该数据的变体(“SVC”之后的数字和之前的日期,以及文本正文)会出现多次。我可以捕获数据字符串,但是一旦捕获,我需要在该数据中找到一个电子邮件地址。电子邮件可能出现在上下文中的任何第 4 行到第 9 行。我似乎无法弄清楚如何隔离数据并将其设置为变量以便可以捕获它。
Select-String $WLDir -pattern '(\d{2}:\d{2}) - (\d{2}:\d{2})(PMT[S|T]\d{8})' -Context 0,9 | ForEach-Object {
$StartTime=[datetime]::ParseExact($_.Matches.Groups[1].Value,"HH:mm",$null)
$EndTime=[datetime]::ParseExact($_.Matches.Groups[2].Value,"HH:mm",$null)
$ElapsedTime = (NEW-TIMESPAN –Start $StartTime –End $EndTime).TotalHours
$Email = Select-String $_. -pattern '(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)'
[PSCustomObject]@{
SO = $_.Matches.Groups[3].Value
Topic = $_.Context.PostContext[0]
Status = $_.Context.PostContext[1]
ElapsedHrs = $ElapsedTime
Email = $Email
}
} | Export-Csv $ExportCsv -NoTypeInformation
我的示例文件是这样的:
09:45 - 10:15SVC1234567 | Sev8 |437257 | COMPANY | Due: 12/28/2016
WORK TITLE
- - Preferred Customer (Y/N): Y Phone: 000-000-0000 ANY Hardware (Y/N): N
DATA on file (Y/N/NA): Y Contact: Person Name Full Address: 1234 PANTS
XING, RM/STE 100,NEWARK, NJ, 00000 - Hours: 8-5 Issue: Install admin
and others Fax Number: NA (required for all cases sent to LOCATION or
LOCATION_EXCPT Provider Groups) E-Mail address: email@location.com the
customer speak English? yes Escalation Approved By (Name/ID): Guy
aljdfs ITEM Product: PRODUCTNAME Group:THIS ONE Include
detailed notes below, including reason for severity: SCHEDULED WORK
------------------------------ NOTES: -Cx requesting a tech on site -Cx
wants to install WS and wants to be assisted in other concerns
我尝试使用$Email = Select-String $_. -pattern '(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)'、$Email = Select-String $_.WLDir -pattern '(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)' 和$Email = Select-String $_.Context -pattern '(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)' 在上下文中捕获电子邮件,但不知道如何回调上下文以搜索电子邮件地址。我也很有可能做错了。有谁知道我如何捕获它并将其设置为变量?
【问题讨论】:
-
$_.Context.PostContext -
@MathiasR.Jessen 我没有收到错误,但我的 export.csv 显示“电子邮件”的空白列。
$Email = Select-String $_.Context.PostContext -pattern '(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)'是正确的语法吗?该正则表达式查找电子邮件地址有问题吗? -
$Email 是匹配对象而不是字符串。假设它正在返回您需要首先提取值的东西。就像你对第一个选择字符串所做的那样。正则表达式中的括号将组成一个此处不需要的组。
-
@Matt 我只是在我的 CSV 中得到空白字段,所以我不确定。我得到四个“真实”的陈述。这个声明是建立在 MathiasR.Jessen 的声明之上的吗?我尝试了 Mathias 所说的 CSV 上的电子邮件字段为
Email = $Email.Matches.Groups[1]并轰炸了整个工作(返回空白文档),所以我没有掌握这一点。 -
@Matt 我已经有一段时间了。我不知道如何获得价值。你能帮忙吗?我有没有机会说服你复制代码和示例并运行它,看看我做错了什么?
标签: powershell variables select-string