題 刪除Notepad ++中的所有行除了包含我需要的單詞的行外?


我有一個文本文件,並希望保持行開頭 <Path>,並刪除所有其他行。

我該怎麼做?


176
2018-05-29 15:05


起源


有關: stackoverflow.com/questions/8264391/... - Cees Timmerman
LineFilter2插件也很容易使用。 - Karsten


答案:


有一種簡單的方法可以實現這一目標。您需要執行3個步驟。

  1. 轉到搜索菜單>查找...>選擇“標記”選項卡。激活正則表達式。搜索 ^<Path> (^ 是為了線路開始)。不要忘記檢查“書籤行”並按“全部標記”

    ==>您要保留的所有行都有書籤

  2. 轉到“搜索 - 書籤 - 反向書籤”菜單

    ==>您要刪除的所有行都有書籤。

  3. 轉到“搜索 - 書籤 - 刪除書籤行”菜單

    ==>刪除所有已添加書籤的行。


257
2018-06-03 20:23



+1。很好,不知道這個。還有“刪除無標記線”或“剪切/複製標記線”的選項可以節省一些時間。 - deizel
起初我遇到了麻煩,因為我的Notepad ++版本(6.2.3)沒有名為“Mark Tab”的菜單項。相反,您必須轉到“搜索” - >“查找...” - >單擊“標記”選項卡。而且您不再需要反轉書籤。 Notepad ++現在有“刪除未標記的行”。但是你的小費對我幫助很大!謝謝! - Adam
您可以跳過步驟2,因為(至少從v6.4.5開始)可以選擇“刪除未標記的行”。 - Nailuj
我正在使用Notepad ++這麼久,我以前從未知道什麼是'書籤'。令人驚訝的是,這個工具有多強大,我對它知之甚少。 - Danubian Sailor
你是一個天才。這只是如何了解您使用的工具的另一個令人震驚的例子。 - Marcello Grechi Lins


從6.3開始,這實際上可以分兩步完成。我認為它可以比我第一次嘗試時的5.9更早完成。

使用stema的帖子作為這個答案的基礎。現在只需少一步。標記線條並刪除未標記的線條。完成。詳細說明如下。

  1. 搜索菜單“查找”。在“查找”對話框中,單擊“標記”選項卡。激活正則表達式。搜索^(^用於行開始)。不要忘記檢查“書籤行”並按“全部標記”

    ==>您要保留的所有行都有書籤

  2. 搜索菜單 - >書籤 - >刪除未標記的行。

    ==>全部  已刪除書籤行。


57
2018-02-27 16:03



這花了我10秒,而另一個解決方案花了我20秒。謝謝! - Black


清潔正則表達式解決方案

兩步變種

  1. 正則表達式替換

    (?!^.*test.*$)^.+
    

    用您要求的文本替換測試

  2. 更換

    [\r\n]{2,}
    

    \r\n

單步變種

使用 ^(?!<Path>).*\r\n 用空字符串替換匹配。廣義版本將是 ^(?!.*?test).*\r\n這不會刪除文件末尾的空行。刪除所有其他行,包括多個連續的空行。

說明:

  1. (?!) 是負面的看起來。 ^.*test.*$  選擇包含所請求文本的整行。

  2. [\r\n]{2,} 匹配任何 \r\n 一旦這是Windows新行發生的話。如果你有Linux或其他操作系統,你可能需要弄亂這個。第二種是用一條返迴線替換它。


25
2017-07-08 16:51



人們注意:有時帶行尾的正則表達式(EOL)“不起作用”。該 \r\n帖子中提到的EOL是Windows使用的,因此可能或可能不是您正在尋找的。通常在Linux環境中它只是 \n,或在Mac環境中 \r,所以如果從任一文件中提取文件,它將不是Windows風格的EOL。但是,如果您通過FileZilla和ASCII模式觸發器下載,它可能會更改它們 回到Windows EOL (喜歡 \n 成 \r\n)。因此,如果正則表達式不起作用,請轉到“查看>顯示符號>顯示行尾”來檢查EOL樣式。 CR = \r。 LF = \n。 - dhaupin


在我看來,最簡單的方法是使用“在當前文檔中查找全部”功能,然後將結果復製到新文件中或選擇全部並替換當前文件。

這將找到包含您的文本的所有行,並將它們列在底部。只需右鍵單擊搜索結果並複制/粘貼即可。


5
2017-12-17 11:43



您必須通過替換刪除行號 \tLine [\d]*: 。還是一個很好的答案。 - Noumenon


轉到菜單 搜索  - > 找...  - >激活正則表達式。搜索“^路徑“(^表示行開頭)。

單擊“在當前文檔中查找全部”按鈕。

將出現“查找結果”窗口,其中包含模式的所有行。選擇將它們複製/粘貼到Notepad ++中的新選項卡。

在這個新標籤中,得到:菜單 搜索  - > 更換...  - >激活正則表達式。

在“查找內容:”字段中,使用模式:“Line \ d +:”。將“替換為:”字段留空。

單擊“全部替換”按鈕。


4
2018-06-21 16:36





假設您確實想要匹配 <Path> 而不是文件系統路徑,您可以使用Perl從命令行嘗試:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

它在Windows上與Strawberry Perl一起使用,因此如果結果不符合您的預期,請進行相應調整。


3
2018-05-30 01:02





這很笨拙,但要全部複製到 高強,然後使用 =IF(LEFT(A1,6)="<Path>",A1,"") 並將該公式一直複製下來。然後將其複制回Notepad ++。這不是理想的,但它很容易(如果你有Excel)。警告:對於縮進行(Excel將移動列等),它將無法正常工作。


3
2018-05-29 18:07



如果有多種方法可以直接處理此任務,您為什麼要破壞性地複製到另一個應用程序中,在那里處理並轉回? - Baldrickk


使用Notepad ++沒有簡單的方法可以做你想做的事。您需要將程序下載到計算機或在VB中編寫腳本(我假設您使用的是Windows)。

你可以用sed做兩種方式之一。 sed實用程序是* nix的最愛,可以從GnuWin的偉大人物中找到Windows(http://gnuwin32.sourceforge.net/packages/sed.htm)。您將下載此程序,然後從命令提示符處運行您的命令。

刪除所有不包含的行:
sed -i '/^<PATH>/!d' file

打印包含新文件的所有行:
sed -n '/^<PATH>/p' file > newfile

我建議你使用打印你想要的新文件行。這樣做的原因是你可能不會第一次得到正則表達式聲明。 sed實用程序使用正則表達式基本語法(查看引用位於 http://www.regular-expressions.info/reference.html)。如果是* nix路徑(/ var / www),那麼你需要轉義/字符才能使你的正則表達式工作。

例: sed -n '/^\/var\/www/p' file > newfile 
這將打印出以'/ var / www'開頭的所有行。如果我提交以逃避/字符,那麼命令會拋出錯誤。您可以使用反斜杠字符\來轉義特殊字符(例如/)。


2
2018-05-30 03:00