vi搜索副本粘贴搜索副本

Asked
Viewd1521

2

我只是想知道是否有人可以使用vi来完成以下操作。

我有一个文本文件,其中可能包含类似的内容

 start of text file:
--something1.something2--
--anotherThing1.something2--
end of text file:
 

如果我要采用这一行并通过搜索与第一次出现的[A-Za-z0-9]相匹配的任何内容进行转换,请将其复制到缓冲区,然后将其附加到-的第一次出现之前的同一行上

 start of text file:
--something1.something2.something1--
--anotherThing1.something2.anotherThing1--
end of text file:
 

是否只有一个VI命令来执行此操作?

欢呼 本

  • 因此,您要复制“ –”之后的第一个单词,直到第一个“。”,然后附加“。”,然后在最后一个“ –”之前找到单词?

    stefanBJune 24, 2009 15:50

4 个答案

5
 :%s/--\([a-zA-Z0-9]*\).\(.*\)--/--..--/gc
 

,或者不要求每次更换都确认:

 :%s/--\([a-zA-Z0-9]*\).\(.*\)--/--..--/g
 

将产生:

 --something1.something2.something1--
--anotherThing1.something2.anotherThing1--
 

来自:

 --something1.something2--
--anotherThing1.something2--
 

这是要复制“-”之后的第一个单词,直到第一个“。”。并附加“。”和在最后一个'-'之前找到的单词。

使用vim。

评论:

有人提到,当有多个单词等时,它将不起作用。 我在以下进行了测试:

 start of text file:
--something1.something2.something3.something4.something5.something6--
--anotherThing1.something2.anotherThing3.anotherThing4.anotherThing5--
end of text file:
 

替换为上面的表达式后

 start of text file:
--something1.something2.something3.something4.something5.something6.something1--
--anotherThing1.something2.anotherThing3.anotherThing4.anotherThing5.anotherThing1--
end of text file:
 
  • 如果不想让您确认每个替换项,请从最后删除“ c”。

    Jon GrantJune 24, 2009 15:59
  • 真的很喜欢小组不确定您能做到这一点,谢谢您的帮助

    benjipeteJune 25, 2009 16:40
  • 你们是真正伟大的炸弹。我通常以不同的方式进行替换。

    :g / –([[A-Za-z0-9] )。(。)– / s // – \ 1. \ 2. \ 1 –

    benjipeteJune 25, 2009 16:38
  • 正则表达式的/ g修饰符不是必需的。如果一行上出现多次–text.text–,则您的正则表达式将无法正常工作。

    user55400June 25, 2009 06:54
  • –text.text–是什么意思……您有失败的示例吗?

    stefanBJune 25, 2009 07:11
1

尝试一下:

 %s:\([A-Za-z0-9]\)\(\..\)--:.--:g
 
0

基于stefanB的解决方案,但使用否定的字符类和“ very magic”设置,我得到以下替换命令:

 :%s/\v--([^.]+)\.(.*)--/--..--/
 

根据确切的要求(“ something1”和“ anotherThing1”允许使用什么字符),这可能更正确,也可能不正确。

还要考虑的一件事:到目前为止发布的所有解决方案都假设每行仅出现一次“ --text.someOtherText--”模式。如果不是这种情况,则模式必须进行调整,并且需要/ g修饰符。

  • 我实际上已经对多个段进行了测试,例如“ –anotherThing1.something2.anotherThing1.anotherThing1.anotherThing1–”,它仍将第一个单词添加在最后一个单词之前–

    stefanBJune 25, 2009 07:14
1

天哪,在我登录以发布答案时,您已经发布并已发表评论!

 %s/--\(\w*\)\.\(.*\)--/--..--/g
 

-ab1.cd2..yz99---> --ab1.cd2..yz99.ab1-