ソースファイルからテキストを検索して削除する

ソースファイルからテキストを検索して削除する

複数のファイルからブロックテキストを検索して削除したいです。

一致するテキストブロックがファイルにあります。ディレクトリを解析し、/home/user/myblock.txtディレクトリ内のすべてのファイルから/home/user/repコンテンツを削除したいとします。mybloc.txt

答え1

削除するテキストブロックが複数行にまたがっていて、各個々のファイルがRAMに収まる場合、最も簡単な方法は各ファイルをRAMに完全にロードしてグローバル文字列置換を実行することです。 Perlを使用すると、レコード区切り文字を設定せずにレコード-i -pごとにファイルレコードを変更することでこれを簡単に実行できます-0777(基本レコード区切り文字は改行です)。

perl -0777 -i -pe '
    BEGIN {
        open BLOCK, "<", "/home/user/myblock.txt";
        $block = <BLOCK>;
        die unless length($block);
        close BLOCK;
    }
    s/\Q$block//g
' /home/user/rep/*

答え2

次のことを試すことができます。

    var=`cat /home/user/myblock.txt`;
    sed -e s/"$var"//g /home/user/rep/somefile;

もちろん、これはテキストブロックなしで一部のファイルのみを印刷しますが、出力リダイレクトを使用すると簡単に保存できます。

ファイルを「所定の位置に」編集するには、-isedの引数を使用しますが、注意してください。すべてのデータが失われる可能性があります。一時ファイルに保存して名前を変更することをお勧めします。

myblock.txtに複数の行がある場合、この方法は機能しません。

関連情報