使用特定循环在 vi 中搜索和替换

Search and replace in vi using specific loop

您好,我有特殊需求。
在一个 .txt 文件中我有几行,内容是这样的:

   ABC, Srl
   Progettazione componenti plastici tecnici
   REGGIO EMILIA, Italia
   MECCANICA PIPPO, Snc
   Lavorazione dei metalli
   NOVELLARA, Italia
   SALDATURE, Srl
   Produzione di componenti meccanici
   RUBIERA, Italia
   OLEODINAMICA PAPERINO, Srl
   Produzione di centraline oleodinamiche
   GUASTALLA, Italia

由于3行属于同一个元素,我需要:
1) 将 \n 替换为 ;并在同一行中仅获得 3 行,由 ;
分隔 2) 然后有一个 \n
3) 最后循环重复命令

这样我应该得到以下信息:

   ABC, Srl;Progettazione componenti plastici tecnici;REGGIO EMILIA, Italia  
   MECCANICA PIPPO, Snc; Lavorazione dei metalli;NOVELLARA, Italia
   SALDATURE, Srl; Produzione di componenti meccanici; RUBIERA, Italia
   OLEODINAMICA PAPERINO, Srl; Produzione di centraline oleodinamiche; GUASTALLA, Italia

提前致谢!

好吧,你没有说 OS 或 vi 的版本,但在 Linux 上的 vim 中,你可以创建一个包含所需命令的宏 运行那个宏。你可以在其他版本的 vi 中做同样的事情,你只需要查找正确的命令。例如在 vim 中,在编辑器中打开包含 12 行 4 条真实记录的文件,定位到第一行然后 运行 这些命令(我的评论如下,不要输入):

qz       # q to start recording a macro into register z
Jr;Jr;j  # J to join 2 lines. r; to replace the space with a semi-colon. 
         #   Repeat, then j to move down a line.
q        # Stop recording the macro.

移至下一组的第一行并键入

@z 

到运行寄存器'z'中存储的宏。通过数字将命令执行到 运行 多次。所以现在还剩2套。定位到第一个并输入:

2@z

创建宏后,运行 使用此命令在所有行上创建宏:

:%norm! @z