我如何用正则表达式和vim取代?

时间:2016-03-11 03:21:53

标签: regex vim replace sed

我需要用vim或sed替换下一个字符串:

[words with space and some caracter like _]

['words with space and some caracter like _']

只有我需要添加['foo']使用''

我在vim中尝试这种方式(但是,不起作用):

:%s/[[a-z]\+]/'&'/g

5 个答案:

答案 0 :(得分:3)

试试这个:%s/\(\(\w\+\)\(\s\+\)\)\+_/'&'/gc
说明: 该命令的一般语法是:range s / pattern / string / gc
激活命令模式
指定范围,表示将命令应用于文件的整个文本
s 替代品的简称 第一个和第二个之间的所有内容/定义模式
\( \)用于对模式的部分进行分组 \ w 是一个元字符,匹配单词字符
\ + 是一个量词,匹配1个或多个出现次数
\(\ w \ + \)将模式的上述两部分分组 第二个和第三个之间的所有内容/指的是将替换匹配文本的文本
& 是后引用,它指的是与模式
匹配的整个文本 g 表示替换所有出现次数 c 会提示您确认每次替换 \ 用于转义 \ w,\ s,\ + \(和\)中的字符,这意味着\后面的字符具有特殊含义。

答案 1 :(得分:1)

您需要转义括号元字符

:%s/[\[a-z\]\+]/'&'

一般来说,我发现确保您在视觉上匹配正确的文字,然后进行替换

会很有帮助
:set hlsearch
:set incsearch

# make sure your matching the right text
/text to match/

# paste from the register named "/" which holds the expression you just perfected
:%s/<control+r><slash>/foo

答案 2 :(得分:0)

在vim中尝试这个

%s/\[\(.\{-}\)\]/\['\1'\]/g 

答案 3 :(得分:0)

这适用于sed。它与vim非常相似。

sed "s/\[\([^]]*\)\]/['\1']/g" input.txt

答案 4 :(得分:0)

使用精彩的surround.vim插件,它将是:

ysi[

'

哪种手段意味着:

  • y&#34;你&#34;
  • s&#34;环绕&#34;
  • 我&#34;内部&#34;
  • [&#34;括号&#34;

'