我需要修改目錄中的多個文件。我需要修改所有包含特定文本的文件,並用一些新文本替換。Shell腳本遍歷所有子目錄並修改文件內容
所以我想寫一個shell腳本,它將遍歷所有的子目錄並修改內容,但我在遍歷所有可能的目錄時遇到問題。
我需要修改目錄中的多個文件。我需要修改所有包含特定文本的文件,並用一些新文本替換。Shell腳本遍歷所有子目錄並修改文件內容
所以我想寫一個shell腳本,它將遍歷所有的子目錄並修改內容,但我在遍歷所有可能的目錄時遇到問題。
您可以使用find
遍歷查找文件的子目錄,然後將它們傳遞到sed
以搜索並替換文本。
例如
find /some/directory -type f -name "*.txt" -print -exec sed -i 's/foo/bar/g' {} \;
會找到所有的txt文件,並用它們替換foo。
-i
使sed在原地更改文件。如果您希望在更改之前備份文件,還可以爲sed提供備份後綴。
您想要find
。
for n in $(find | grep txt$)
do
echo $n
modify_content.sh $n
done
GNU找到
find /some_path -type f -name "*.txt" -exec sed -i 's/foo/bar/g' "{}" +;
...和GNU sed – 2011-02-24 17:09:57
沒有必要使用'-print'和你使用了錯誤的模式對'-name' – kurumi 2011-02-24 10:38:36
你可以如果您想創建備份文件(在這種情況下爲'.bak'擴展名),請使用'-i.bak'。 – 0xC0000022L 2011-02-24 16:00:22