2011-01-11 84 views

回答

10

有幾個possiblities:

使用find:

使用find創建的所有文件的列表,然後通過管道他們sed或電子正如您在參考答案中所建議的那樣,相當簡單,只需要掃描一次文件。

你會使用find .後的相同答案從您提到的問題之一,但加入-path '*/.svn' -prune -o爲了修剪出SVN目錄。有關使用prune選項和find的討論,請參閱this question - 雖然請注意,他們的模式有誤。因此,打印出的所有文件,你可以使用:

find . -path '*/.svn' -prune -o -type f -print 

然後,您可以通過管道將進入一個xargs電話或任何做單獨更換,爲你引用的問題建議。有很多關於不同的選擇,我不會在這裏重現的討論過,雖然我更喜歡從John Zwinck's answer版本:

find . -path '*/.svn' -prune -o -type f -exec sed -i 's/foo/bar/g' {} + 

使用遞歸的grep:

如果你有一個系統GNU grep,你也可以使用它來查找文件列表。這可能比發現效率較低,但它允許您只呼籲匹配的文件sed,我個人覺得語法很多更容易記住(或聯機手冊找出):

sed -i 's/foo/bar/g' `grep -l -R --exclude-dir='*/.svn' 'foo' .` 

-l選項會導致grep只輸出文件名列表,而不是匹配的行。

使用GUI編輯:

另外,如果你使用Windows,做我想做的 - 讓NoteTab編輯的副本(提供免費版本),並使用它的搜索 - 和-盤替換命令,它會自動忽略隱藏的.svn目錄並且正常工作。

編輯:更正發現模式*/.svn而不是.svn,增加了更多的細節和一些其他的可能性。然而,這取決於你的平臺和svn版本:.svn沒有*/可能在某些情況下需要,比如CentOS 7.

0

這個怎麼樣?

grep -i "search_string" `find "*.some_extension"` 

也就是說一半的解決方案尋找具有特定擴展名....一旦你知道,有串的文件,可以通過管道成的sed很容易地修改文件內的search_string ....

+0

這似乎是一個非常複雜的`grep -R -i「search_string」`方式,無論哪種情況,您都需要添加一些內容來排除SVN目錄。 – 2011-01-11 22:48:53

+0

@Brooks:它是一個更便攜的版本使用,因爲不是所有的grep都有一個遞歸開關.... – t0mm13b 2011-01-11 22:51:00