3

テキストの一部を変更する必要があるファイルが何百もあります。

たとえば、「http://」のすべてのインスタンスを「rtmp://」に置き換えたいとします。

ファイルの拡張子は .txt で、複数のフォルダーとサブフォルダーに分散しています。

私は基本的に、すべてのフォルダー/サブフォルダーとすべてのファイルを通過する方法/スクリプトを探しています。そのファイル内で「http」が見つかった場合は、「rtmp」に置き換えます。

4

2 に答える 2

11

findとの組み合わせでこれを行うことができますsed

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

これにより、各ファイルのバックアップが作成されます。いくつかをチェックして、希望どおりになっていることを確認してから、次を使用してそれらを削除することをお勧めします

find . -name \*.bak -delete
于 2012-11-13T16:27:00.123 に答える
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を使用しています)

于 2012-11-13T16:27:37.870 に答える