2009-12-13 70 views

回答

41

的方法有很多。但其中一個答案是:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g' 
6

我總是這樣做,與編腳本前的腳本

for i in "[email protected]"; do ex - "$i" << 'eof'; done 
%s/old/new/ 
x 
eof 

命令僅僅是:從VI線模式。

+0

這具有明顯的優勢,您可以執行更復雜的編輯。 – alastair 2013-05-13 14:10:54

2

最近的bash shell,假設你不需要遍歷目錄

for file in *.txt 
do 
while read -r line 
do 
    echo ${line//find/replace} > temp   
done <"file" 
mv temp "$file" 
done 
21

像殭屍溶液(快我假設),但sed的(許多發行版和OSX標準),而不是的Perl:

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g' 

這將替換所有富在當前目錄下的Python文件 OCCURENCES與酒吧並使用.py.bak擴展名爲每個文件創建一個備份。

,並刪除德.bak文件:

find . -name "*.bak" -delete 
+0

這會影響搜索之外的空白。它似乎在我的每個文件的末尾添加了新行。 – Shane 2013-05-09 17:38:43

+0

每個版本的sed都不支持AFAIK in-place編輯;我認爲這是一個GNU擴展。 – alastair 2013-05-13 14:06:13

+0

這是一個GNU擴展,至少在我的版本中它必須是 'sed -i.bak' (沒有空格) – friedemann 2014-08-28 16:00:22

4

使用find和sed用名或目錄與空間的使用這樣的:

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g' 
的[查找和替換在多個特定的詞