關於this post,如何從應用字符串替換中排除一個或多個文件?通過使用上述帖子作爲例子,我希望能夠在給定目錄的所有後代文件中用「橙子」代替「蘋果」,除了,例如./fpd/font/symbol.php
。除某些文件外,遞歸地查找和替換
我的想法是使用find命令的-regex
開關,但遺憾的是它沒有一個-v
選擇像grep
命令,因此我可以在正則表達式不能否定以不文件必須在其中發生替換匹配。
關於this post,如何從應用字符串替換中排除一個或多個文件?通過使用上述帖子作爲例子,我希望能夠在給定目錄的所有後代文件中用「橙子」代替「蘋果」,除了,例如./fpd/font/symbol.php
。除某些文件外,遞歸地查找和替換
我的想法是使用find命令的-regex
開關,但遺憾的是它沒有一個-v
選擇像grep
命令,因此我可以在正則表達式不能否定以不文件必須在其中發生替換匹配。
我在Git倉庫使用:
find . -path ./fpd/font/symbol.php -prune -o -exec sed -i 's/apple/orange/g' {} \;
沒有測試過這一點,但它應該工作:
$ find .
.
./a
./a/b.txt
./b
./b/a.txt
$ find . -name \*a\* -print
./a
./b/a.txt
$ find . ! -name \*a\* -print
.
./a/b.txt
./b
$ find . -not -name \*a\* -print
.
./a/b.txt
./b
你可以用!
(或-not
)與-name
結合否定
grep -ilr orange . | grep -v ".git" | grep -e "\\.php$" | xargs sed -i s/orange/apple/g {}
它會:
.git
文件夾;.php
文件。不用說,您可以包含儘可能多的grep
圖層,以過濾要傳遞到xargs
的列表。
已知問題:
至少在我的Windows環境中它無法打開具有路徑或命名空間的文件。從來沒有想過這一個。如果有人想知道如何解決這個問題,我想知道。
這很好用!我稍微調整了它: 'default =「myApp」; grep -Rl $默認。 | grep -v「.git」| grep -v「angular.js」| grep -v $ 0 | xargs sed -i「s/$ default/somethingElse/g」;' 基本上,id所做的就是將angularjs-seed應用程序(「myApp」)的默認名稱替換爲整個內容(可以是用戶定義的)項目除.git文件夾外,文件angular.js(它在註釋塊中作爲示例出現)以及腳本本身。很好的答案! :) –
順便說一句,根據您的示例在命令末尾添加{}會導致以下警告:'sed:can not read {}:沒有這樣的文件或目錄,所以我省略了它,它的工作方式類似於魅力! –