PowerShell或批处理:查找和替换字符

3

我有十个文本文件(制表符分隔,共20万行)。我的意图是查找字符 [, ], | 并将它们分别替换为 a、o、u。请问如何使用Windows批处理脚本或Powershell实现此操作?

1个回答

12

使用Powershell可以解决这个问题,下面是具体做法。虽然也可以使用cmd.exe和一些内置的Windows可执行文件来实现,但那样会更加麻烦且难以理解。

它将读入某个文件,在每行上:

  • a替换[
  • o替换]
  • u替换|

由于[]|在powershell中都是特殊字符,所以需要转义,而反引号`用于换行命令。

$filename="textfile.txt"
$outputfile="$filename" + ".out"

Get-Content $filename | Foreach-object {
    $_ -replace '\[', 'a' `
       -replace '\]', 'o' `
       -replace '\|', 'u'
} | Set-Content $outputfile

如果你想处理一个文件列表,你可以设置一个数组来做这个,并遍历整个数组。

$filenames = @("/path/to/File1.txt", "file2.txt", "file3.txt")
foreach ($file in $filenames) {
    $outfile = "$file" + ".out"

    Get-Content $file | Foreach-object {
        $_ -replace '\[', 'a' `
           -replace '\]', 'o' `
           -replace '\|', 'u'
    } | Set-Content $outfile
}

1
除非你必须直接编辑文件,否则真的不应该在 Get-Content 周围使用 () -- 这会导致所有行在替换之前被收集起来,对于大文件来说代价非常昂贵。 - Jaykul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接