你如何从正则表达式中抽出/打印匹配,只有正则表达式的匹配?

时间:2012-09-14 19:34:18

标签: regex unix vim

我需要在迁移文件,视图,区域设置文件等之间移动一大堆变量名。

我不想重新输入所有这些,也不想复制,粘贴和修剪,因为我做了太多。

我一直试图通过正则表达式来解决这些问题,但每次尝试这样做时,都会打印整行,而不仅仅是我希望以':'开头并以'\ s'结尾的变量名称如::: name,:email,:home_phone等

我怎样才能让这些只是提取出我想要的东西?

我一直试图在vim中执行此操作:

      :%s/:.*\s/y

这是输入文件:

      <%= f.input  :name %>
      <%= f.input  :email %>
      <%= f.input  :home_phone %>
      <%= f.input  :cell_phone %>
      <%= f.input  :other_phones %>

      <%= f.input  :last_position_candidate_id %>
      <%= f.input  :last_position_title %>
      <%= f.input  :last_position_company_id %>
      <%= f.input  :last_position_start_date %>
      <%= f.input  :last_position_salary %>
      <%= f.input  :last_position_medical_insurance %>
      <%= f.input  :last_position_christmas_bonus %>
      <%= f.input  :last_position_annual_bonus %>
      <%= f.input  :last_position_vehicle %>
      <%= f.input  :last_position_other_benefits %>

      <%= f.input  :conversational_english %>
      <%= f.input  :written_english %>
      <%= f.input  :vehicle %>

这是我想要的:

              :name 
      :email 
      :home_phone 
      :cell_phone 
      :other_phones 
      :last_position_candidate_id 
      :last_position_title 
      :last_position_company_id 
      :last_position_start_date 
      :last_position_salary 
      :last_position_medical_insurance 
      :last_position_christmas_bonus 
      :last_position_annual_bonus 
      :last_position_vehicle 
      :last_position_other_benefits 
      :conversational_english 
      :written_english 
      :vehicle

2 个答案:

答案 0 :(得分:3)

%s/.*\(:\w\+\)\s.*/\1/

有关详细信息,请参阅http://vimregex.com/#backreferences

答案 1 :(得分:1)

为避免重新输入,

可能就足够了
:set iskeyword+=:

在Vim中打开源文件,并在另一个缓冲区中使用内置的插入模式完成(例如:last_后跟 Ctrl + N