在 Vim 中刪除僅以整數開頭並包含整數的行

在 Vim 中刪除僅以整數開頭並包含整數的行

我有一個包含整數(行號)和文字的文件。透過提取 PDF 文件,這些行號被放入與文字不同的行中,我想刪除所有這些行號。我對正規表示式不是很熟練,但我 100% 確定它應該不會太難。我使用 vim/nvim,但如果我必須使用 awk/sed,那也對我有用。

文件看起來像這樣:

123
124
125

Text was found in
those three lines
should stay

所以理想情況下,我想搜尋:所有以正整數(1,2,3...123456)開頭並且只包含該整數的行。它們應該被刪除。

任何幫助深表感謝。

獎金挑戰:由於某種原因,某些行以 開頭^L1234,因此還有一個額外的特殊字元。在某些時候我也想刪除這些。但可以是單獨的步驟。

答案1

  • [0-9]是一個簡單的收藏幾乎在任何地方都可以使用的數字。在 Vim 中,您也可以使用\d(十進制數字)。
  • 您需要一個或多個實例:附加\+乘數。
  • 這應該是該行中唯一的內容,因此正規表示式需要是錨定的到開頭和結尾(分別通過^$)。
  • 您要嘗試在所有行上進行配對;在 Vim 中,這是透過:global/{pattern}/.
  • 匹配線應該是:deleted。

綜合起來:

:global/^[0-9]\+$/delete

您也可以使用sed;它速度更快並且以非互動方式工作。由於這會自動將任何規則應用於所有輸入行,因此您不需要:global, 並且:delete只是d那裡的 。使用-i,替換就已完成(因此請確保正確並擁有原始檔案的備份副本!)

sed -i -e '/^[0-9]\+$/d' file

對於可選前綴,其乘數為\?。如果這^L是單個字符,您可能需要在 Vim 中將其輸入為<C-V><C-L>

答案2

在 Vim 中刪除僅以整數開頭並包含整數的行

:%s/^[0-9]\+\n//gc

解釋

  • :%s//- 全域搜尋和替換
  • ^- 從行首開始
  • [0-9]- 匹配數字
  • \+- 貪心匹配一個或多個
  • \n匹配換行符(注意:檢查您的行結尾,這些結尾在系統之間有所不同,並且可能是例如\r\n
  • gc- 全域匹配+確認(c如果有很多或你確定則刪除

輸出

123
124
125

Text was found in
those three lines
should stay

:%s/^[0-9]*\n//g

Text was found in
those three lines
should stay

獎金

terdon 對 U&L 的回答,^Lform feed character, wih 可以使用以下方法刪除sed

sed 's/\o14//g' file 

值得閱讀該答案以了解其他方法。

相關內容