批量替换文本文件中的文本(Linux / OSX命令行)

时间:2012-11-13 16:22:49

标签: unix command-line replace text-files batch-processing

我有数百个文件需要更改其部分文字。

例如,我想用“rtmp://”替换“http://”的每个实例。

这些文件具有.txt扩展名,并分布在多个文件夹和子文件夹中。

我基本上正在寻找通过每个文件夹/子文件夹和每个文件的方式/脚本,如果它在该文件中找到“http”的出现,则将其替换为“rtmp”。

2 个答案:

答案 0 :(得分:10)

您可以结合使用findsed

来执行此操作
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来实现强大的全局)