【问题标题】:Replace multiple character strings at once using a replace matrix使用替换矩阵一次替换多个字符串
【发布时间】:2017-10-23 15:54:38
【问题描述】:

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

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

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

【问题讨论】:

  • 文件在哪里?为什么你同时标记了 unix 和 notepad++?
  • Stack Overflow 不是代码编写服务,希望您尝试自己编写代码。我建议您对您的问题进行一些研究(也许尝试页面顶部的搜索框)并尝试自己编写一些代码。如果/当您遇到任何代码问题时,请再次询问并解释您尝试过的内容,以及为什么它对您不起作用。请参阅 How to Ask 以获取有关提出好问题的帮助。
  • to: utsav: 文件要么在服务器(网站)上,要么在本地磁盘上。我正在尝试通过任一/任何列出的选项(unix、notpad++、vi 等)获得解决方案。这就是我得到的结果:perl -pi -e 's/FINDTEXT/REPLACETEXT/' * */* */*/* */*/*/* ' 谢谢!
  • jamesC:仅供参考:https://stackoverflow.com/questions/11389466/...绝对零“代码”或尝试提出了一个高度评价的问答。我的问题不是代码编写;它正在寻找一个指向矩阵的简单命令。
  • ..python 在我的情况下不是一个选项。

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


【解决方案1】:

这里有一些东西可以帮助您入门。如果替换文件约为 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
}

【讨论】:

【解决方案2】:

在服务器上,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' *

【讨论】:

    猜你喜欢
    • 2011-07-01
    • 2011-12-01
    • 2013-12-05
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多