在Vi Editor中替换多行

时间:2011-10-22 04:57:39

标签: regex linux unix vi

这是文件中的一些文本行。我需要使用vi编辑器删除某些文本块。

极光(复数:极光或极光)是天空中的自然光显示,特别是在高纬度(北极和南极)地区,由高能大气环境中的高能带电粒子与原子的碰撞引起。

Most aurorae occur in a band known as the auroral zone[2][2] which is typically 3° to 6° in latitudinal extent and at all local times or longitudes.

The auroral zone is typically 10° to 20° from the magnetic pole defined by the axis of the Earth's magnetic dipole. During a geomagnetic storm, the auroral zone will expand to lower latitudes. The diffuse aurora is a featureless glow in the sky which may not be visible to the naked eye even on a dark night and defines the extent of the auroral zone.

我有一个像上面这样的输入文件。在这个文件中,我必须删除某些文本块的出现,如下所示。

Most aurorae occur in a band known as the auroral zone[2][2] which is typically 3° to 6° in latitudinal extent and at all local times or longitudes.

所以,我使用的是以下命令:

:g/^Most/,/auroral/,/longitudes./d

我正在删除以Most开头的行,最后是中间和经度的极光。

2 个答案:

答案 0 :(得分:2)

您可以做的事情有明显的限制,但在上下文中,您可以使用:

:g/^while/.,/^}/d

删除while循环,其中while位于一行的开头,直到行开头的近括号。


  

请你再补充一点吗?

:g/^while/部分全局搜索以while开头的行。接下来是为每个匹配的行执行的ex命令。该命令是.,/^}/d,这意味着从当前行(.)到以紧括号(/^}/)开头的下一行执行删除(d)。您也可以使用向后搜索或相对动作(?^{?.-3.+10)等内容。

很难从评论的错误外观中准确地了解您的想法(不是您的错误 - 评论不会保留有用的格式。)

--------------
Stack Over Flow
c**p
c**p
c**p
cool
c**p
c**p
c**p
------------
  

我需要将Stack Over Flow替换为------------ [...]

这很简单,我看不出cool对它有什么影响:

:g/^Stack Over Flow/.,/^-------/d

这与我原来的答案是同构的。

答案 1 :(得分:1)

删除块{ ... }而不是搜索和替换会更容易。

您可以前往该区域(内部或开放式)并使用daB将其删除