在多个文件中查找和替换文本

在多个文件中查找和替换文本

我希望有人能抽出时间帮我创建一个批处理文件或类似文件,用于在多个文件中查找和替换文本。我尝试过许多“搜索和替换”实用程序,但找不到能满足我需求的程序。

要求如下:在多个文件中查找并用不同的文本替换每个文件中的相同文本。

例子:

File1.txt、file2.txt、file3.txt 都有一个文本字符串“请更改我”

将 file1.txt 中的文本字符串“change me please”替换为“file1changed” 保存为原始文件名 (file1.txt) 将 file2.txt 中的文本字符串“change me please”替换为“file2changed” 保存为原始文件名 (file2.txt) 将 file3.txt 中的文本字符串“change me please”替换为“file3changed” 保存为原始文件名 (file3.txt)

答案1

使用 PowerShell 命令:

Get-Content c:\file1.txt | ForEach-Object { $_ -replace "change me please", "file1 changed" } | Set-Content c:\changed1.txt

Get-Content c:\file2.txt | ForEach-Object { $_ -replace "change me please", "file2 changed" } | Set-Content c:\changed2.txt

给我留下了两个文件:

更改1.txt

更改2.txt

有谁能告诉我如何重命名这些文件并覆盖原始文件:

changed1.txt为file1.txt

changed2.txt 至 file2.txt

答案2

强力搜索可以按照你的要求做。

答案3

如果文件不太大,那么你可以使用

$filenames = @("file1.txt", "file2.txt", "file3.txt")

foreach ($file in $filenames) 
{
    $replacementStr = $file + ' changed' 
    (Get-Content $file) | 
        Foreach-object { $_ -replace 'change me please' , $replacementStr   } | 
     Set-Content $file
}

请注意 (Get-Content $ file) 周围的括号,它表示文件被读入内存(因此要求文件很小),但这意味着当您将文件写回时,该文件不再被使用。

如果文件对于内存来说太大,您可以将其写入临时文件,然后使用类似

Cp $tempfilename $file 
rm $tempfilename

将临时文件复制到原始文件上并删除临时文件。

答案4

perl -p -i -e 's/change me please/$argv changed/' file1 file2 subdir/*.txt foo/*.xyz

您可以从以下位置下载 Perl(适用于 Windows)活跃状态或者草莓ETC

相关内容