我有一個包含整數(行號)和文字的文件。透過提取 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}/
. - 匹配線應該是
:delete
d。
綜合起來:
: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 的回答,^L
是form feed character
, wih 可以使用以下方法刪除sed
:
sed 's/\o14//g' file
值得閱讀該答案以了解其他方法。