我想从多个文件中搜索并删除块文本。
要匹配的文本块位于文件中,假设/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 有多行,则此方法不起作用。