使用 notepad++ 将特定行号的文本替换为其他文本

使用 notepad++ 将特定行号的文本替换为其他文本

我有数百个输入文件,它们非常相似,但略有不同。我想用另一行文本替换所有打开的文档中的第 4 行。搜索和替换功能不起作用,因为第 4 行在各个文件中的文本不同。

我想要做的一个粗略的例子如下所示:

文件 A 第 4 行:一些文本

文件 B 第 4 行:不同的文本

将第 4 行替换为:新文本

答案1

我想说 Notepad++ 不是完成这项工作的工具。

相反,我建议您使用某种脚本语言来:

  • 迭代文件
  • 然后迭代这些行
  • 替换单行(如果存在)
  • 然后保存文件。

下面是可以执行此操作的 PowerShell 脚本:

# Set by user to their needs.
$filesToCheck = "C:\path\to\files\*.txt"
$lineToChange = 4
$replacementLineText = "New Text"

# Gather list of files based on the path (and mask) provided by user.
$files = gci $filesToCheck

# Iterate over each file.
foreach ($file in $files) {

    # Load the contents of the current file.
    $contents = Get-Content $file

    # Iterate over each line in the current file.
    for ($i = 0; $i -le ($contents.Length - 1); $i++) {

        # Are we on the line that the user wants to replace?
        if ($i -eq ($lineToChange - 1)) {

            # Replace the line with the Replacement Line Text.
            $contents[$i] = $replacementLineText

            # Save changed content back to file.
            Set-Content $file $contents
        }
    }
}

答案2

搜索正则表达式:

^(([^\n]*\n){n})[^\n]+

其中“n”是要跳过的行号,并替换为

\1text

其中 text 是您想要在第 n+1 行添加的新文本。

使用适当的 EOL 调整搜索表达式,我使用了适用于 UNIX 的“\n”。

解释:

此脚本查找要跳过的前 n 行:

([^\n]*\n){n}

并将它们保存在缓冲区中(用括号括起来:

(([^\n]*\n){n})

然后是另一行(非空):

([^\n]+)

然后替换为缓冲区的内容

\1

然后是您的新文本。

\1text

附加信息:

如果您想要格外确定,并且文件不是很大,您还可以匹配以下行:

^(([^\n]*\n){n})[^\n]+(\n([^\n]*\n){n})

用。。。来代替

\1text\3

未测试。

相关内容