在 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,可以使用 删除sed

sed 's/\o14//g' file 

值得阅读该答案以了解其他方法。

相关内容