如何查找和替換的每次出現:在/我的/測試/ DIR /目錄樹下每一個文本文件,如何在SVN簽出中進行遞歸查找和替換?
bar
foo
(遞歸查找/替換)。
但我希望能夠到SVN結帳範圍內可以做到這一點,而不是與SVN限制在碰任何東西的.svn目錄
與此類似,但裏面現在:Awk/Sed: How to do a recursive find/replace of a string?
如何查找和替換的每次出現:在/我的/測試/ DIR /目錄樹下每一個文本文件,如何在SVN簽出中進行遞歸查找和替換?
bar
foo
(遞歸查找/替換)。
但我希望能夠到SVN結帳範圍內可以做到這一點,而不是與SVN限制在碰任何東西的.svn目錄
與此類似,但裏面現在:Awk/Sed: How to do a recursive find/replace of a string?
有幾個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.
這個怎麼樣?
grep -i "search_string" `find "*.some_extension"`
也就是說一半的解決方案尋找具有特定擴展名....一旦你知道,有串的文件,可以通過管道成的sed很容易地修改文件內的search_string
....
這似乎是一個非常複雜的`grep -R -i「search_string」`方式,無論哪種情況,您都需要添加一些內容來排除SVN目錄。 – 2011-01-11 22:48:53
@Brooks:它是一個更便攜的版本使用,因爲不是所有的grep都有一個遞歸開關.... – t0mm13b 2011-01-11 22:51:00