Powershell Select-String解析从.rtf到.csv

时间:2017-02-13 09:11:20

标签: powershell

解析.rtf文件,输出.csv文件中的电子邮件地址?

我有一个包含大量电子邮件地址的.rtf文件,我需要对其进行解析,以便将.csv文件与Active Directory中的活动用户进行比较。

基本上我想要" @ my.domain.com"

左边的内容
$finds = Select-String -Path "path\to\my.rtf" -Pattern "@my.domain.com" | ForEach-Object {$_.Matches}
$finds | Select-Object -First 1 | ft *

这当然给了我一个结果,所以我没有很多输出。 我只设法得到比赛或完整的线。

我已尝试在

行添加一些内容
$finds = Select-String -Path "path\to\my.rtf" -Pattern "\w.@my.domain.com"

这给了我地址中最后两个字母。

如果我继续在"通配符"

中添加点
-Pattern "\w.....@my.domain.com"

对于包含较少字符的地址,我也获得了大量数字/字符(.rtf格式化)。

我该怎么做?

编辑:我会在找到解决方案后立即更新问题。截至目前,我正在尝试使用正则表达式。 例如:

-Pattern "\w*?@my.domain.com"

2 个答案:

答案 0 :(得分:0)

$mPattern = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+(\.[a-zA-Z]{2,4})"    
$lines = get-content "path\to\your.rtf"
foreach($line in $lines){    
    ([regex]::MAtch($rtfInput, $mpattern, "IgnoreCase ")).value }

答案 1 :(得分:0)

这段代码对我有用。我的初始代码,但有一个新的搜索模式。

$finds = Select-String -Path "path\to\my.rtf" -Pattern "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+(\.[a-zA-Z]{2,4})" | ForEach-Object {$_.Matches}
$finds | Select-Object -First 10 | ft *

谢谢!