我有以下命令
find ./ -type f -exec perl -pi -e 's/<pattern>//g' '{}' \;
它运行良好并删除了模式,但是如何删除模式,它所在的行以及之后的n
行?
答案 0 :(得分:1)
拿一个档案:
aaa
bbb
ccc
ddd
eee
fff
现在,我们想要从bbb
移除到ccc
,所以:
perl -i -0pe 's/bbb.*ccc//ms' file
0
将悄悄逐段
答案 1 :(得分:1)
它比优雅更蛮力,但我认为这将删除具有匹配模式的线和跟随它的线。
find ./ -type f -exec perl -i -e '$x=0 ; while (<>) {if ($_ =~ /<pattern>/) { $x++; next; }; if ($x) { $x=0; next; }; print "$_";}' {} \;
答案 2 :(得分:0)
这是一个文件的perl答案。我不希望任何发现此问题的人都没有意识到你所包含的find
也会编辑隐藏文件。
<强>答案:强>
perl -ni -e '$ml=$. if /<pattern>/; print unless (defined $ml && $.<=$ml+[n])' input-file
<强>解释强>
perl -ni
会读取并替换input-file
,但只有在指示
$ml=$. if /<pattern>/
将$ml
匹配的行变量设置为$.
,这是输入文件的当前行
print unless (defined $ml && $.<=$ml+[n])
将打印除匹配行和[n]下一行