我在文件中有一些文字。
我使用Get-Content
来读取文件,然后使用正则表达式-replace
查找模式并替换内容。这是完美的,直到我遇到一种情况,我需要替换第二次出现的那个字符串,而不是第一次或任何后面的字符串(在这种情况下,它只显示两次)。
我想搜索"某些字符串来查找",然后只替换此字符串的第二次出现。我一直试图找到如何做到这一点的例子,但是已经做得很短。我可以找到如何替换部分字符串,但不能完全单独出现整个字符串。
这可以替换所有出现的字符串。
(gc file.txt) -replace "Some string to find", "some string changed") | sc file.txt
答案 0 :(得分:0)
如果它不是变量并且它总是只是第一次跳过,你可以简单地做类似
的事情mystring.substring(mystring.indexOf("string to match")).replace("string to match", "some string changed")
(例如)
答案 1 :(得分:0)
试试这个:
$find="world"
$replace="nice"
$string="the world is world, no?"
$pos=$string.IndexOf($find, $string.IndexOf($find)+1)
if ($pos -ne -1)
{
"{0}{1}{2}" -f $string.Substring(0, $pos), $replace, $string.Substring($pos + $find.Length)
}
else
{
$string
}
答案 2 :(得分:0)
如果你想替换文字的第二个单词,请尝试替换这样的(单词以查找使用ponctuation):
$find="world", "world.", "world;", "world," , "world?", "world!", "world:"
$replace="nice"
$string="the world is world, no?"
$array=$string -split " "
$Nbfounded=0
$result=""
foreach ($item in $array)
{
$Founded=$false
if ($item -in $find)
{
$Nbfounded++
$Founded=$true
}
if ($Founded -and $Nbfounded -eq 2)
{
$result=$result + ' ' + $replace
}
else
{
$result=$result + ' ' + $item
}
}
$result.TrimStart()