2011-06-27 72 views
2

我已經習慣使用Vim中的表達式來替換大文件,並想知道通過什麼實用程序學習,這將允許我以類似的方式在文件夾中執行這樣的事情。 什麼命令行程序的搜索和替換是最像vims和跨文件夾?將文本替換爲多個文件

回答

5
sed -i.bak 's/foo/bar/g' * 

將取代每foobar上在代替當前目錄下的每個文件的每一行,並創建一個備份文件,.bak擴展。所以我想看看sed。但是... Vim很有能力:

vim -c "bufdo!%s/foo/bar/g" -c "wqa" * 

幾乎是一樣的。 bufdo!執行以下命令(%s/foo/bar/g在這種情況下=>在每行上將foo替換爲bar%是每行的特殊行地址))。 wqa表示:寫入全部然後退出。您最多可以指定10個到Vim的交換機,這些交換機將按照指定的順序執行。所以,基本上這是Vim的自動化:

  1. 都開在當前目錄下的文件=>每個文件都有自己的緩衝區
  2. 執行代替每個緩衝
  3. 然後寫入文件,並退出

唯一的區別是缺少備份文件創建(可通過一些.vimrc設置輕鬆實現)。但sed更快。

+0

您能詳細說明'bufdi!%s'和'wqa'在這裏做什麼嗎? – Prospero

+0

答覆已更新。 –

2

大概你應該用vim不是外部命令行程序。請參閱:help :find:help :grep

例如,如果要跨文件夾grep單詞,請通過**/*.txt

2

你可以通過例如結合Perl和慶典 做到這一點:

find . -type f -name "*.cpp" -print | xargs perl -i -pe 's/pattern/replace/g' 

這會發現所有「的.cpp」的文件開始在「」並將它們中的每一個(路徑)傳遞給perl命令

+0

感謝您的查找提示。使用.css腳本這樣的優秀工具,我幾乎覺得髒了;) – Prospero

相關問題