如何在Perl中删除<和>之间的字符?

rlb*_*ond 5 regex perl multiline

我需要编写一个Perl脚本来读取文件,并删除<>内的任何内容,即使它们位于不同的行上.也就是说,如果输入是:

Hello, world. I <enjoy eating
bagels. They are quite tasty.
I prefer when I ate a bagel to
when I >ate a sandwich. <I also
like >bananas.
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

Hello, world. I ate a sandwich. bananas.
Run Code Online (Sandbox Code Playgroud)

如果文本与正则表达式在一行,我知道如何做到这一点.但我不知道怎么用多行来做.最终我需要能够有条件地删除模板的一部分,这样我就可以为配置文件生成参数化文件.我认为perl会是一种很好的语言,但我仍然掌握它.

编辑:还需要超过1个<>的实例

Dan*_*nny 6

您可能想要查看Perl模块Text :: Balanced,它是核心发行版的一部分.我认为这对你有帮助.一般来说,如果主题文本可能有一组内部分隔符,那么人们想要避免正则表达式做这种事情,它可能会变得非常混乱.


Cov*_*ene 6

在Perl中:

#! /usr/bin/perl   
use strict;

my $text = <>;
$text =~ s/<[^>]*>//g;
print $text;
Run Code Online (Sandbox Code Playgroud)

正则表达式替换以<通过第一个>(包括)开头的任何内容,并将其替换为空.g是全球性的(不止一次).

编辑:纳入了Hynek的评论和混乱


cha*_*aos 4

local $/;
my $text = <>;
s/<.*?>//gs;
print $text;
Run Code Online (Sandbox Code Playgroud)