[英]Bash script to find files based on filename and do search replace on them
我在網絡文件系統中散布了一堆文件(同名,例如abc.txt)。
我需要遞歸搜索每個文件,一旦找到每個文件,就進行內容搜索並替換它們。
經過研究后,我發現可以使用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后面必須使用空引號,以表明我們不想生成備份文件。 手冊頁顯示為:
-i擴展名:
就地編輯文件,以指定擴展名保存備份。 如果給出零長度的擴展名,則不會保存任何備份。
find . -r -type f abc.txt -exec sed -i -e 's/search/replace/g' {} +
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.