2016-03-11 63 views
0

我需要更換用vim的下一個字符串或sed的:如何用正則表達式和vim替換?

[words with space and some caracter like _] 

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

我需要添加[ '富']用'

我這個嘗試vim(但是,不起作用):

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

回答

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 
3

試試這個:%s/\(\(\w\+\)\(\s\+\)\)\+_/'&'/gc
說明: 命令的一般語法是:範圍S /圖案/串/ GC
激活命令模式
指定的範圍內,這意味着該文件
小號的整個文本短於第一和第二/之間替代
一切應用命令定義的圖案
\(\)用於將圖案的組份
\ W是元字符,它匹配字CHARAC叔
\ +是量詞,和匹配1或多個正好
\(\ W \ + \)基的圖案的上述兩個部分
第二和第三/之間的一切是指文本將替換匹配的文本
&是背參考,它指的是由圖案匹配整個文本
手段替換所有出現
Ç將提示用戶確認每個替換
\用於轉義字符\ W,\ S,\ + \(和\),這意味着以下\字符具有特殊的含義。

+0

儘管此代碼可以回答這個問題,提供有關附加的上下文*爲什麼*和/或*如何*這個代碼回答了這個問題提高其長期價值。 –

+2

@BenjaminW。修改了答案並加入瞭解釋,希望它能幫助社區 –

+0

'[foo]'和'[]'怎麼樣?也許你還應該解釋爲什麼要使用反斜槓。 –

0

試試這個在vim

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

你可以在'\ ['\ 1'\]'中使用'['和']'而不用反斜槓' –

0

這個工作在sed。這很像在vim

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

與大surround.vim插件,這將是:

ysi[ 

'

這literraly意味着:

  • y 「則」
  • 的「環繞「
  • 我「內部」
  • [「括號」

'