我试图从PS脚本加载一个文件,并需要根据给定的模式和新值搜索替换。我需要知道模式是什么。以下是该文件的摘录:
USER_IDEN;SYSTEM1;USERNAME1;
30;WINDOWS;Wanner.Siegfried;
63;WINDOWS;Ott.Rudolf;
68;WINDOWS;Waldera.Alicja;
94;WINDOWS;Lanzl.Dieter;
98;WINDOWS;Hofmeier.Erhard;ReplacerValue:"@dummy.domain.com“要替换的内容: USERNAME1列
预期结果:
USER_IDEN;SYSTEM1;USERNAME1;
30;WINDOWS;Wanner.Siegfried@dummy.domain.com;
63;WINDOWS;Ott.Rudolf@dummy.domain.com;
68;WINDOWS;Waldera.Alicja@dummy.domain.com;
94;WINDOWS;Lanzl.Dieter@dummy.domain.com;
98;WINDOWS;Hofmeier.Erhard@dummy.domain.com;此外,该文件也可以如下所示:
USER_IDEN;SYSTEM1;USERNAME1;SYSTEM2;USERNAME2;SYSTEM3;USERNAME3;
30;WINDOWS;Wanner.Siegfried;WINDOWS2;Wanner.Siegfried;LINUX;Dev-1;LINUX2;QA1
63;WINDOWS;Ott.Rudolf;WINDOWS2;Ott.Rudolf;LINUX;Dev-2
68;WINDOWS;Waldera.Alicja;
94;WINDOWS;Lanzl.Dieter;WINDOWS4;Lanzl.Dieter;WINDOWS3;Lead1
98;WINDOWS;Hofmeier.Erhard;在上面的示例中,我希望在用户名n列下寻找值,但有可能列行可能不存在,但CSV (;)和对将保持不变,而且第一个值是标识符,因此它始终存在。
我已经找到了开始的方法,但我需要得到这样的模式:
(Get-Content C:\script\test.txt) |
Foreach-Object {$_ -replace "^([0-9]+;WINDOWS;[^;]+);$", '$@dummy.domain.com;'} |
Set-Content C:\script\test.txt编辑I提出了这样的模式:非常固定于这个特定的文件,只有一个域名-用户名对,并且不依赖于列。
发布于 2015-02-24 12:31:06
我认为用正则表达式来做这件事是很困难的。不要使用Get-Content,而是使用Import,它将为您拆分列。然后,您可以使用Get来标识用户名列。就像这样:
$x = Import-Csv YourFile.csv -Delimiter ';'
$f = @($x[0] | Get-Member -MemberType NoteProperty | Select name -ExpandProperty name | ? {$_ -match 'USERNAME'})
$f | % {
$n = $_
$x | % {$_."$n" = $_."$n" + '@dummy.domain.com'}
}
$x | Export-Csv .\YourFile.csv -Delimiter ';' -NoTypeInformationhttps://stackoverflow.com/questions/28689483
复制相似问题