我想从文件中搜索字符串集合并替换为另一个文件。例如:
文件A.txt(搜索模式)
文件B.txt(实际文件)
所以,在这里,我想将文件A中给出的所有字符串替换为文件B(比较/替换文件A的所有行与文件B的每一行)。我想以简单的方式实现,也许使用foreachobject循环。请帮帮我??
答案 0 :(得分:0)
为了获得良好的学习体验,我在下面创建了一个cmdlet。内联注释应该能够指导您如何完成它。
function Get-ReplacedText
{
[CmdletBinding()]
Param
(
# Path containing the text file to be searched.
$FilePath,
# Path containing the patterns to be searched and replaced.
$SearchPatternFilePath
)
# Patterns will be read in full for fast access.
$patterns = Get-Content -Path $SearchPatternFilePath
# Use the StreamReader for efficiency.
$reader = [System.IO.File]::OpenText($FilePath)
# Open the file
while(-not $reader.EndOfStream)
{
$line = $reader.ReadLine()
foreach ($pattern in $patterns) {
$search, $replacement = $pattern.Split()
# Replace any searched text that exist with replacement.
$line = $line -replace $search, $replacement
}
# Get the replaced line out of the pipeline.
$line
}
#Close the file.
$reader.Close()
}
请注意,您正在阅读模式的文件应该是这样构造的,并且搜索模式和替换文本之间有一个空格。此外,搜索模式可以是Regexp格式。
searchpattern1 replacement1
searchpattern2 replacement2
最后,使用cmdlet的示例
Get-ReplacedText -FilePath txtfile.txt -SearchPatternFilePath searchpattern.txt | Out-File -FilePath result.txt -Encoding ascii