2
我有一堆文件(具有相同的名稱,說abc.txt)遍佈整個網絡文件系統。Bash腳本根據文件名找到文件,並做搜索替換它們
我需要遞歸搜索這些文件中的每一個,一旦找到每一個文件,都要進行內容搜索並替換它們。
經過一番研究,我發現我可以使用find命令找到這些文件(用-r來遞歸吧?)。喜歡的東西:
find . -r -type f abc.txt
而且用sed來已經找到並在每一個取代:
sed -ie 's/search/replace/g' abc.txt
但我不知道如何粘上兩個在一起,使我找到ABC的所有地方。 txt,然後在每一個上進行搜索/替換。
我的目錄樹非常大,所以我知道通過所有目錄的遞歸搜索需要很長時間,但是這比手動嘗試查找每個文件要好。
我在使用Bash的OSX 10.6上。
謝謝大家!
更新:我認爲下面發佈的答案可能適用於其他操作系統(Linux也許),但對於OSX,我不得不稍微調整它。
find . -name abc.text -exec sed -i '' 's/search/replace/g' {} +
在sed中指定我們不想生成備份文件後,似乎需要空引號。此手冊頁上寫着:
-i擴展:就地
編輯文件,保存與指定的擴展備份。如果給定零長度擴展,則不會保存備份。
只有缺少的是'-exec'子句末尾的'\;'或'+ ... ...並且複製了原始海報使用的'-ie'而不是'-i -e '可能會產生意想不到的效果,因爲前者將'e'指定爲用於備份的文件擴展名。 –
已更新。感謝您的評論。 –
謝謝amit_g!除了最終結局之外,所有這一切都很清楚。 {} +最後做了什麼? – nube