我需要用vim或sed替换下一个字符串:
[words with space and some caracter like _]
到
['words with space and some caracter like _']
只有我需要添加['foo']使用''
我在vim中尝试这种方式(但是,不起作用):
:%s/[[a-z]\+]/'&'/g
答案 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)