使用替换矩阵一次替换多个字符串

时间:2017-05-23 15:30:44

标签: powershell unix command-line notepad++ vi

在几个大文本文件的内容中,我的目标是用新的字符串替换所有出现的特定字符串,同时替换300 不同的字符字符串。

我有什么方法可以使用逗号或制表符分隔搜索和替换矩阵这样做吗? (实际字符串的长度和字符类型差异很大,但不包含,TAB

currentstring1,newstring1
currentstring2,newstring2
currentstring3,newstring3
aB9_./cdef,newstring4
.
currentstring300,newstring300

2 个答案:

答案 0 :(得分:0)

这是让你入门的东西。如果替换文件是~300行,那么Import-Csv应该没问题。但是,如果要替换字符串的文件很大,则Get-Content将成为问题。它会尝试将整个文件读入内存。您将需要逐行遍历文件读取。

[cmdletbinding()]
Param()

$thefile = './largetextfile.txt'
$replfile = './repl.txt'

$reps = Import-Csv -Path $replfile -Header orgstring,repstring
foreach ($rep in $reps) {
    Write-Verbose $rep
}

$lines = Get-Content -Path $thefile
foreach ($line in $lines) {
    Write-Verbose $line
    $newline = $line

    foreach ($rep in $reps) {
        $newline = $newline -replace $rep.orgstring,$rep.repstring
    }

    Write-Verbose $newline
}

答案 1 :(得分:0)

在服务器上,unix: 1。在文本编辑器中按如下所示重命名矩阵,然后复制它。 2. 在文件所在的服务器目录中,按原样粘贴多行重命名矩阵。 3。输入。 4. 如果字符串中存在某些字符(如斜杠),则可能需要对其进行转义,并且可以替换末尾的*以指定文件。

perl -pi -e 's/FINDTEXT1/REPLACETEXT1/g' *
perl -pi -e 's/FINDTEXT2/REPLACETEXT2/g' *
perl -pi -e 's/FINDTEXT3/REPLACETEXT3/g' *