我有数百个文件需要更改其部分文字。
例如,我想用“rtmp://”替换“http://”的每个实例。
这些文件具有.txt扩展名,并分布在多个文件夹和子文件夹中。
我基本上正在寻找通过每个文件夹/子文件夹和每个文件的方式/脚本,如果它在该文件中找到“http”的出现,则将其替换为“rtmp”。
答案 0 :(得分:10)
您可以结合使用find
和sed
:
find . -type f -name \*.txt -exec sed -i.bak 's|http://|rtmp://|g' {} +
这将创建每个文件的备份。我建议您检查一下以确保它能够满足您的需求,然后您可以使用
删除它们find . -name \*.bak -delete
答案 1 :(得分:2)
这是我用来执行此操作的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来实现强大的全局)