【问题标题】:Search and replace in vi using specific loop使用特定循环在 vi 中搜索和替换
【发布时间】:2017-01-13 17:59:09
【问题描述】:

您好,我有特殊需要。
在一个 .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

提前致谢!

【问题讨论】:

  • 您应该edit 显示您已经尝试或研究过的问题。见How to Ask
  • 提供正确的代码格式

标签: loops search replace vi


【解决方案1】:

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

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

【讨论】:

  • 这……是……简直……太棒了! :) 谢谢,非常有用且快速,在我的 Mac OS X 上完成。
猜你喜欢
  • 2010-12-13
  • 2013-08-12
  • 2016-10-17
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 2013-07-13
  • 1970-01-01
相关资源
最近更新 更多