我有一个文本(.txt
)文件,其中包含以下内容:
Car1
Car2
Car3
Car4
Car5
为了更改随机文本的Car1
我使用了这个脚本:
Get-ChildItem "C:\Users\boris.magdic\Desktop\q" -Filter *.TXT |
Foreach-Object{
$content = Get-Content $_.FullName
$content | ForEach-Object { $_ -replace "Car1", "random_text" } | Set-Content $_.FullName
}
这工作正常,但现在我想在我的文本文件中的Car2
下添加一个文本行。
我该怎么做?
答案 0 :(得分:2)
只需链接另一个-replace
并使用新行!
Get-ChildItem "C:\Users\boris.magdic\Desktop\q" -Filter *.TXT |
Foreach-Object{
$file = $_.FullName
$content = Get-Content $file
$content | ForEach-Object { $_ -replace "Car1", "random_text" -replace "(Car2)","`$1`r`nOtherText" } | Set-Content $file
}
首先,| Set-Content $_.FullName
不起作用,因为该管道中不存在文件对象。所以一个简单的做法就是保存变量以便稍后在管道中使用。您还可以使用ForEach($file in (Get-ChildItem....))
构造。
获得所需内容的具体更改是第二个-replace
。我们在括号中放置您想要匹配的内容,我们可以在$1
的替换字符串中引用它。我们使用反引号来确保PowerShell不将其视为变量。
我们也可以删除一些冗余,因为-replace
将对整个文件的字符串起作用
Get-ChildItem "c:\temp" -Filter *.TXT |
Foreach-Object{
$file = $_.FullName
(Get-Content $file) -replace "Car1", "random_text" -replace "(Car2)","`$1`r`nOtherText" | Set-Content $file
}
虽然这适用于您的示例文本,但我想指出更复杂的字符串可能需要更多的技巧以确保您进行正确的更改并且我们使用的替换是基于正则表达式而不需要针对此特定例。
<强> .Replace()强>
因此,如果您只是进行简单的替换,那么我们可以更新您的原始逻辑。
Foreach-Object{
$file = $_.FullName
$content = Get-Content $_.FullName
$content | ForEach-Object { $_.replace("Car1", "random_text").replace("Car2","Car2`r`nOtherText")} | Set-Content $file
}
这就是使用字符串方法.Replace()