Powershell 动态替换文件中出现的每个字符串
我有一些文本文件,其中出现了一些字符串“bad”。我想用Powershell 动态替换文件中出现的每个字符串,powershell,Powershell,我有一些文本文件,其中出现了一些字符串“bad”。我想用good1,good2,good3,good100等等来替换每次出现的“bad” 我正在尝试,但它正在用最后一个数字good100替换所有出现的情况 $raw = $(gc raw.txt) for($i = 0; $i -le 100; $i++) { $raw | %{$_ -replace "bad", "good$($i)" } > output.txt } 如何做到这一点?试试这个: $i = 1 $raw =
good1
,good2
,good3
,good100等等来替换每次出现的“bad”
我正在尝试,但它正在用最后一个数字good100替换所有出现的情况
$raw = $(gc raw.txt)
for($i = 0; $i -le 100; $i++)
{
$raw | %{$_ -replace "bad", "good$($i)" } > output.txt
}
如何做到这一点?试试这个:
$i = 1
$raw = $(gc raw.txt)
$new = $raw.split(" ") | % { $_ -replace "bad" , "good($i)" ; if ($_ -eq "bad" ) {$i++} }
$new -join " " | out-file output.txt
如果raw.txt是单行,并且包含单词“bad”总是由一个空格分隔,这是很好的,比如:alfa bad beta bad gamma bad(等等…)
评论后编辑:
对于多行文本:
$i = 1
$new = @()
$raw = $(gc raw.txt)
for( $c = 0 ; $c -lt $raw.length ; $c++ )
{
$l = $raw[$c].split(" ") | % { $_ -replace "bad" , "good($i)" ; if ($_ -eq "bad" ) {$i++} }
$l = $l -join " "
$new += $l
}
$new | out-file output.txt
对于这种情况,我通常使用Regex::Replace重载,该重载使用Matchevaluator:
$evaluator ={
$count++
"good$count"
}
gc raw.txt | %{ [Regex]::Replace($_,"bad",$evaluator) }
evaluator还将匹配的组作为参数获取,因此您可以使用它进行一些高级替换。还有另一种方法,一次只替换一个匹配项:
$raw = gc raw.txt | out-string
$occurrences=[regex]::matches($raw,'bad')
$regex = [regex]'bad'
for($i=0; $i -le $occurrences.count; $i++)
{
$raw = $regex.replace($raw,{"good$i"},1)
}
$raw
我认为没有split方法,因为它会抛出一个错误,说明这种方法不存在。不应该是split()
更好吗?你能试试这个:$raw.gettype()并告诉我是否返回[string]吗?字符串类型有split()方法!从Get Content
返回的对象数组没有拆分方法。您需要使用foreach。您可以将其转换为字符串,然后使用split[string](gcraw.txt)
。