在 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++ 中完成此操作的方法。我用一些示例數據進行了嘗試,結果如您所願。

  • 開啟您要編輯的文件
  • 轉到文件第一行的開頭
  • 點選選單中的「巨集」-->「開始錄製」選項
  • 插入(標題),按結束按鈕轉到行尾,插入(/標題)
  • 按主頁按鈕前往行首
  • 按下向下按鈕到第 2 行
  • 插入(連結),按結束按鈕轉到行尾,插入(/連結)
  • 按主頁按鈕前往行首
  • 按下向下按鈕轉到第 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

我知道這不是一個明確的答案,但它可以引導您走向正確的方向。如果你看一下這個網站它向您展示如何在正規表示式模式下使用替換函數在行首和行尾插入內容。

EG 尋找內容:^(.+)$ 替換為:title\1/title

現在將編輯每一行,但這已經完成了一半。

相關內容