正则表达式在vim中查找仅包含整数的行


1

我有一个包含整数(行号)和文本的文件。通过提取PDF文件,这些行号被放入文本中的单独行,我想删除所有这些行号。我对正则表达式并不是很熟练,但我百分百肯定它不应该是超级硬盘。我使用vim / nvim,但是如果我必须使用对我也有用的awk / sed。

文件看起来像这样:

123
124
125

Text was found in
those three lines
should stay

理想情况下,我想搜索:所有行,以正整数(1,2,3 ... 123456)开头,只包含该整数。它们应该被删除。

任何帮助深表感谢。

奖金挑战:出于某种原因,有些行开头^L1234,所以还有一个额外的特殊字符。在某些时候,我也想删除它们。虽然可以是单独的步骤。

Answers:


0
  • [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>


非常感谢。我实际上比我想象的更近。逃离+角色有很多帮助,从那以后,我可能已经猜到了$自己丢失的标志。该<C-V><C-L>事情的工作只是为罚款。
保罗

正如您所看到的,正则表达方言之间存在细微差别,而不仅仅是Vim和sed之间。在Vim中,您甚至可以影响转义量(通过\V/ \v)。你不需要猜Vim; 它有很好的帮助。:help patterns这将是一个良好的开端。
Ingo Karkat

0

删除在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 

值得一读的是看其他方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.