我正在尝试在.eml文件中搜索所有电子邮件,并添加<>找到的每封电子邮件之间的括号,这里是我的代码,它会输出应该发生的内容,但不会写入文件。注意,我需要保留文件中的现有数据(标题,正文等),只替换电子邮件地址。
$rawtext = [IO.File]::ReadAllText("c:\scripts\emailex.eml")
$regex = [regex]"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"
$regex.Matches($rawtext) | ForEach-Object{ $_ -replace $($_.Value), "<$_>" }
答案 0 :(得分:0)
我不相信您的电子邮件Regex完全可靠,但您只是在阅读该文件而不是回写它。
我建议使用Get-Content和Set-Content并使用管道将所有内容链接在一起。虽然对于非常大的文件,这可能会变得很慢并且内存密集。
类似的东西:
(Get-Content C:\test\test.txt) |
Foreach-Object {$_ -replace "(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b",'<$0>'} |
Set-Content C:\test\test.txt
运行上面的Powershell可以从
转换文本文件C \ test \ test.txtHi my email is bob@gmail.com
I like to email sally@gmail.com
到
Hi my email is <bob@gmail.com>
I like to email <sally@gmail.com>