首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索所需的RegEx -使用PowerShell替换

搜索所需的RegEx -使用PowerShell替换
EN

Stack Overflow用户
提问于 2015-02-24 06:30:23
回答 1查看 64关注 0票数 0

我试图从PS脚本加载一个文件,并需要根据给定的模式和新值搜索替换。我需要知道模式是什么。以下是该文件的摘录:

代码语言:javascript
复制
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列

预期结果:

代码语言:javascript
复制
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;

此外,该文件也可以如下所示:

代码语言:javascript
复制
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 (;)和对将保持不变,而且第一个值是标识符,因此它始终存在。

我已经找到了开始的方法,但我需要得到这样的模式:

代码语言:javascript
复制
(Get-Content C:\script\test.txt) | 
Foreach-Object {$_ -replace "^([0-9]+;WINDOWS;[^;]+);$", '$@dummy.domain.com;'} | 
Set-Content C:\script\test.txt

编辑I提出了这样的模式:非常固定于这个特定的文件,只有一个域名-用户名对,并且不依赖于列。

EN

回答 1

Stack Overflow用户

发布于 2015-02-24 12:31:06

我认为用正则表达式来做这件事是很困难的。不要使用Get-Content,而是使用Import,它将为您拆分列。然后,您可以使用Get来标识用户名列。就像这样:

代码语言:javascript
复制
$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 ';' -NoTypeInformation
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28689483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档