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

2019-08-02 16:43发布

我有数百个文件,我需要改变它的文本的一部分。

例如,我要替换的“http://”的每一个实例与“RTMP://”。

这些文件具有.TXT的推广与跨几个文件夹和子散布。

我基本上是在寻找办法/脚本进入低谷的每一个文件夹/子文件夹,每一个文件,如果发现该文件中的“HTTP”的发生与“RTMP”代替。

Answer 1:

你可以组合做这个findsed

find . -type f -name \*.txt -exec sed -i.bak 's|http://|rtmp://|g' {} +

这将创建每个文件的备份。 我建议你检查了几个,以确保它没有你想要的东西,那么你可以使用删除

find . -name \*.bak -delete


Answer 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为强大的通配)



文章来源: Batch replace text inside text file (Linux/OSX Commandline)