2011-12-24 39 views
0

例如,我有一個任務,搜索當前目錄下包含「foo」的所有文件,然後替換爲「bar」。
現在,這裏是我目前的解決方案:
:vim /bar/ **/*
使用該搜索的foo悉數亮相,然後逐一更換一個「棒」
:s/foo/bar/gc
顯然,這是不是一個很好的解決方案在更換變大。所以如果有更好的解決方案將這兩種操作合併爲一種。但是有一個先決條件:必須在更換之前給出提示,就像c在第二個命令中所做的一樣。這是防止替換一些不需要替換的詞。如何結合:vim和:vim中的:s

回答

0

最簡單的將是:

vim $(egrep -l '/foo/' **/*) -c 'bufdo %s/foo/bar/g' 

但是如果文件名上有空格,這將失敗,更可靠的方法是:

files=() 
while IFS= read -rd '' filename; do 
    files+=("$filename") 
done < <(egrep -Zl '/foo/' **/*) 
vim "${files[@]}" -c 'bufdo %s/foo/bar/g'