我有數百個文件需要更改其文本的一部分。批量替換文本文件內的文本(Linux/OSX命令行)
例如,我想用「rtmp://」替換「http://」的每個實例。
這些文件具有.txt擴展名,分佈在多個文件夾和子文件夾中。
我基本上正在尋找一種方式/腳本去槽每個文件夾/子文件夾和每一個單一的文件,如果它發現內部文件的「http」發生替換爲「rtmp」。
我有數百個文件需要更改其文本的一部分。批量替換文本文件內的文本(Linux/OSX命令行)
例如,我想用「rtmp://」替換「http://」的每個實例。
這些文件具有.txt擴展名,分佈在多個文件夾和子文件夾中。
我基本上正在尋找一種方式/腳本去槽每個文件夾/子文件夾和每一個單一的文件,如果它發現內部文件的「http」發生替換爲「rtmp」。
您可以用find
和sed
組合做到這一點:
find . -type f -name \*.txt -exec sed -i.bak 's|http://|rtmp://|g' {} +
這將創建每個文件的備份。我建議你檢查了幾個,以確保它沒有你想要的東西,那麼你可以使用
find . -name \*.bak -delete
這裏有一個zsh
功能我用這樣做刪除:
change() {
from=$1
shift
to=$1
shift
for file in $*
do
perl -i.bak -p -e "s{$from}{$to}g;" $file
echo "Changing $from to $to in $file"
done
}
它使用的很好的Perl機制來創建備份文件並修改指定的文件。您可以使用上面的文件,通過這樣迭代:
zsh$ change http:// rtmp:// **/*.html
或者只是把它放在一個平凡的#!/bin/zsh
腳本(我只是使用的zsh爲強大的通配)
感謝快回答!但是,如何將命令限制爲只有.txt文件?因爲我在文件夾中有其他文件,jpgs等。 – user1596553
將'-name'參數添加到'find',我已經編輯它 – Kevin
@ user1596553改變凱文的腳本到'find。 -type f -name'* .txt'-exec sed -i.bak'| http:// | rtmp:// | g'{} +' –