从源文件中搜索并删除文件中的文本

从源文件中搜索并删除文件中的文本

我想从多个文件中搜索并删除块文本。

要匹配的文本块位于文件中,假设/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 有多行,则此方法不起作用。

相关内容