複数のファイルからブロックテキストを検索して削除したいです。
一致するテキストブロックがファイルにあります。ディレクトリを解析し、/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;
もちろん、これはテキストブロックなしで一部のファイルのみを印刷しますが、出力リダイレクトを使用すると簡単に保存できます。
ファイルを「所定の位置に」編集するには、-i
sedの引数を使用しますが、注意してください。すべてのデータが失われる可能性があります。一時ファイルに保存して名前を変更することをお勧めします。
myblock.txtに複数の行がある場合、この方法は機能しません。