我正在尝试通过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;
什么是最好的方法?
答案 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;'
}