在 Notepad++ 中每隔一行的开头添加文本

在 Notepad++ 中每隔一行的开头添加文本

我想要做的是:

  • 添加<title>到第 1、3、5 行等的开头...(notepad++ 文件中有数百行)
  • 添加</title>到第 1、3、5 行等的末尾...

然后:

  • 添加<link>到偶数行的开头(例如第 2、4、6、8 行等...)
  • 添加</link>到偶数行末尾(例如第 2、4、6、8 行等...)

答案1

就我个人而言,我认为通过编写一个简单的 perl/python 脚本来实现这一点要容易得多,但这里有一种方法可以在 Notepad++ 中实现。我用一些示例数据尝试了一下,效果正如你所希望的那样。

  • 打开要编辑的文件
  • 转到文件第一行的开头
  • 单击菜单中的宏 --> 开始录制选项
  • 插入(标题),按结束按钮转到行末,插入(/标题)
  • 按 Home 键,返回行首
  • 按下向下按钮转到第 2 行
  • 插入(链接),按结束按钮转到行末,插入(/链接)
  • 按 Home 键,返回行首
  • 按下向下按钮转到第 3 行
  • 单击菜单中的宏 --> 停止录制选项

现在,您可以根据需要重播宏多次,它将重复/清除操作。

答案2

也许您可以采用不同于“替代线路”的方法来解决这个问题(使用脚本语言确实可以最好地解决这个问题)。

假设您想要用“link”括起来的行包含一些可将其标识为链接的内容,您可以先替换这些行,然后假设任何剩余的行都必须是标题。假设您的链接行包含“http”:

  1. Control-H调出替换对话框
  2. 输入(http.*)作为搜索条件(找到http其中的任何行,并存储在变量中\1
  3. 输入(link)\1(/link)替换条件 - 将上一步中找到的内容替换为链接标签中包含的内容
  4. 全部替换 - 现在所有链接行均已括起来,任何剩余行都必须是标题

  1. 输入^([^(\(link\))]*)$作为搜索条件(查找不包含(link)
  2. 输入(title)\1(/title)替换条件
  3. 全部替换

然后这将用标题标签括住剩余的行。

答案3

编辑:此答案是在使用 Notepad++ 版本 5.9.8 时编写和测试的,它适用于当前版本的 Notepad++(v 6.2)和大多数以前的版本。写完这个答案后,我将 Notepad++ 更新到了当前版本 6.2,发现解决方案现在变得容易得多。因此,如果您使用的是 Notepad++ 版本 5.9.8(或更早版本),并且您不想更新到当前版本的 Notepad++,那么这个答案将适合您。如果您已升级到 Notepad++ 版本 6 或更高版本,请参阅我的另一个答案,它要简单得多。

使用此文件作为原始文件:

This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7

步骤 1.在所有行的开头和结尾 放置一个带有“ <title>”和“ ”的唯一标签:</title>

In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):  
    F:^(.*)$
    R:<##@@Begin@@##><title>\1</title><##@@End@@##>

结果是:

<##@@Begin@@##><title>This is line 1</title><##@@End@@##>
<##@@Begin@@##><title>This is line 2</title><##@@End@@##>
<##@@Begin@@##><title>This is line 3</title><##@@End@@##>
<##@@Begin@@##><title>This is line 4</title><##@@End@@##>
<##@@Begin@@##><title>This is line 5</title><##@@End@@##>
<##@@Begin@@##><title>This is line 6</title><##@@End@@##>
<##@@Begin@@##><title>This is line 7</title><##@@End@@##>

第 2 步. 删除所有“换行符”(\r\n):

In "Extended" mode:
    F:\r\n
    R:

结果如下(整个文件在一行上):

<##@@Begin@@##><title>This is line 1</title><##@@End@@##><##@@Begin@@##><title>This is line 2</title><##@@End@@##><##@@Begin@@##><title>This is line 3</title><##@@End@@##><##@@Begin@@##><title>This is line 4</title><##@@End@@##><##@@Begin@@##><title>This is line 5</title><##@@End@@##><##@@Begin@@##><title>This is line 6</title><##@@End@@##><##@@Begin@@##><title>This is line 7</title><##@@End@@##>

步骤 3. 将每两行(“偶数”行)的第二行中的 “ <title>”和“ </title>”更改为“ <link>” “ ”:</link>

In "Regular Expression" Mode:
    F:<##@@Begin@@##>(<title>.*?</title><##@@End@@##>)<##@@Begin@@##><title>(.*?)</title>(<##@@End@@##>)
    R:\1<link>\2</link>\3

结果是这样的(整个文件仍然在一行上):

<title>This is line 1</title><##@@End@@##><link>This is line 2</link><##@@End@@##><title>This is line 3</title><##@@End@@##><link>This is line 4</link><##@@End@@##><title>This is line 5</title><##@@End@@##><link>This is line 6</link><##@@End@@##><title>This is line 7</title><##@@End@@##>

步骤 4. 将“结束”标签替换为“换行符”(\r\n):

In "Extended" mode:
    F:<##@@End@@##>
    R:\r\n

结果是:

<title>This is line 1</title>
<link>This is line 2</link>
<title>This is line 3</title>
<link>This is line 4</link>
<title>This is line 5</title>
<link>This is line 6</link>
<title>This is line 7</title>

所以,4 个步骤。如果你只需要做一次,或者只是偶尔做一次,那就还不错了。

Notepad++ 的最大限制是,您无法结合使用“扩展”和“正则表达式”搜索/替换。因此,在“扩展”模式下,您可以搜索“换行符”,但不能使用“通配符”(*.?) 搜索;在“正则表达式”模式下,您可以使用“通配符”搜索,但不能搜索“换行符”。

如果您需要定期执行此操作,使用 Textpad (http://textpad.com),您可以分两步进行(如果文件有“奇数”行数的可能性):

步骤 1.在所有行中添加“” <title></title>

In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):  
    F:^(.*)$
    R:<title>\1</title>

步骤 2. 将每两行(“偶数”行)的第二行中的 “ <title>”和“ </title>”更改为“ <link>”和“ ”:</link>

Still in "Regular Expression" Mode:  
    F:^(<title>.*</title>)\n<title>(.*)</title>
    R:\1\n<link>\2</link>

使用 Textpad,如果您知道文件的行数始终为“偶数”,则可以一次性完成整个操作:

In "Regular Expression" Mode:  
    F:^(.*)\n(.*)\n
    R:<title>\1</title>\n<link>\2</link>\n

您也可以使用 awk 轻松进行替换。

编辑:这里有一些信息和使用 awk 执行的示例......

Awk 是一种为 Unix 创建的脚本编程语言,但现在可用于 Windows,我相信也可用于 Mac。

awk 的主要用途是处理(操作和过滤)文本输出和文本文件。例如,处理“日志”文件以打印特定字段和行。

Awk 没有用户界面。它是一种通常从命令窗口提示符运行的程序,或者是“shell 脚本”(unix)或“批处理文件”(Windows)。

通过在运行 awk 时在命令行上指定 awk 命令,或者通过创建 awk 命令脚本文件,可以告诉 awk 如何处理正在处理的文本。

在 unix 上,在命令行上指定所有 awk 命令而不是在 awk 脚本文件中指定是很常见的。在 Windows 上则恰恰相反... 由于 awk 在命令中使用引号、括号和其他标点符号的方式,awk 脚本通常(可能总是)使 Windows 命令提示符混淆。因此在 Windows 上,将 awk 命令放入 awk 脚本文件中来使用 awk 几乎总是更好。

下面是一个使用 awk 作为问题解决方案的示例。

首先,假设您要操作的文本位于名为的文件中:

example.txt

接下来,创建一个包含以下代码的文件。您可以将其另存为:
oddeven.awk(或任何您想要的名称)。

{
    if (NR % 2 == 1)
    {
        print "<title>"$0"</title>"
    }
    else
    {
        print "<link>"$0"</link>"
    }
}

或者,您可以像这样在一行上指定此 awk 脚本:

{ if (NR % 2 == 1) {print "<title>" $0 "</title>"} else {print "<link>" $0 "</link>"} }

我们将使用的 awk 命令行参数是:

-f "oddeven.awk"   This is the name of the awk command script file.
"example.txt"      This is the name of the text file you are reading (and manipulating).
"output.txt"       This is the name of the file you are creating that will contain the modified text.

然后,用来调用 awk 的命令行如下所示:

awk -f "oddeven.awk" "example.txt" > "output.txt"

如果修改文件的过程是“一次性”的事情,那么使用 Notepad++ 或其他文本编辑器可能比学习脚本语言更容易。

但是,如果您要反复执行相同的过程,或者想要自动化该过程以便可以通过 shell 脚本(unix)或批处理文件(Windows)完成,那么 awk 就是您的最佳选择。

答案4

我知道这不是一个明确的答案,但它可以引导你走向正确的方向。如果你看看本网站它向您展示如何在正则表达式模式下使用替换函数在行首和行末插入内容。

例如,查找:^(.+)$ 替换为:title\1/title

现在将编辑每一行,但是这才完成一半。

相关内容