如何通过查找字符串在文件的每一行进行替换

时间:2018-08-09 13:41:51

标签: powershell

我正在尝试通过Powershell中的字符串匹配将文件中每一行的另一个字符串替换为另一个。

示例我有此文件;

dmadmin;Trusted Client;F;
d2_mail_manager;Ticket;F;
dmadmin;Trusted Client;F;
d2_mail_manager;Ticket;F;
d2_mail_manager;Ticket;F;

我想找到字符串dmadmin并替换“; F;”通过“; T;”像这样的每一行

dmadmin;Trusted Client;T;
d2_mail_manager;Ticket;F;
dmadmin;Trusted Client;T;
d2_mail_manager;Ticket;F;
d2_mail_manager;Ticket;F;

什么是最好的方法?

2 个答案:

答案 0 :(得分:2)

对我来说,它看起来像CSV格式的文件。如果是这样,您可以使用以下脚本:

#demo data
@'
dmadmin;Trusted Client;F;
d2_mail_manager;Ticket;F;
dmadmin;Trusted Client;F;
d2_mail_manager;Ticket;F;
d2_mail_manager;Ticket;F;
'@ | out-file C:\Temp\test.csv

import-csv c:\temp\test.csv -Delimiter ';' -Header 'Role','Type','Flag' | % {
    if ($_.Role -eq 'dmadmin') { $_.Flag='T' }
    "$($_.Role);$($_.Type);$($_.Flag);"
} | Out-File C:\Temp\test2.csv

答案 1 :(得分:2)

answer from Pawel是imo的首选方式,但以下是使用正则表达式的替代方法。 通常有不止一种方式给猫剥皮

@'
dmadmin;Trusted Client;F;
d2_mail_manager;Ticket;F;
dmadmin;Trusted Client;F;
d2_mail_manager;Ticket;F;
d2_mail_manager;Ticket;F;
'@ | % {
    $_ -replace "(dmadmin.*)F;", '$1T;'
}