Vi编辑器
输入文件文本格式:
'': hello.Code1
'': hello.Code2
'': hello.Code3
必需的输出文本格式:
'Code1': hello.Code1
'Code2': hello.Code2
'Code3': hello.Code3
想法是我必须复制“。”之后的所有值。单引号''。我可以使用基于Linux的Vi或SED等。或基于MAC。 我在文本文件中有更多2000行 感谢
答案 0 :(得分:1)
您可以在vim中使用宏。类似的东西:
/\.^Mly$?'^MPj0
假设你在第一行的开头。开始录制。要记录到q
寄存器,请点击qq
,然后点击:
i)搜索点
/\.^M
ii)向右移动一个角色,然后猛拉到线的末尾
ly$
iii)反向搜索引用:'
?'^M
iv)粘贴内容并向下移动一行并移至开头。
Pj0
然后您可以重复此操作。假设您将其记录在q
寄存器中:
2@q
(注意:^M
是<Enter>
)
答案 1 :(得分:1)
使用替换命令和捕获组可以非常简单地完成此操作。试试以下正则表达式:
:%s/''\(.*\)\.\(.*\)/'\2'\1.\2
这样说,搜索引号''
,然后捕获到第1组\(.*\)
,然后是文字点\.
,然后捕获到第2组{ {1}} 的。这将是
\(.*\)
进入第1组,
: hello
进入第2组。然后我们将其替换为引号CodeN
中的第2组,然后是第1组'\2'
,然后再加上一个点\1
和第二组{{ 1}}
如果你把\.
放在正则表达式的开头,你就可以摆脱很多反斜杠并使它更具可读性:
\2
您也可以使用\v
命令执行此操作。这使得一组击键应用于缓冲区中的每一行。我会试试这个:
:%s/\v''(.*)\.(.*)/'\2'\1.\2
这说,在每一行上,执行以下按键%normal
向前移动到'。' :%norm f.ly$0p
,向右移动一个字符:%norm
,将所有内容移到此行f.
的末尾,移至此行l
的开头,然后粘贴我们刚才猛烈y$