如何在行之间获取行?

gas*_*ter 0 perl text-processing

我有一个 perl oneliner:

echo -e 'sla\ndfjAAAAk\nsaljdfla\nsjdfBBBBsadf\njasdf' | perl -E 'my $_ = do { local $/; <> }; say join qq!\n!, m!\QAAAA\E\K(.*?)(?=\QBBBB\E)!gs'
k
saljdfla
sjdf
Run Code Online (Sandbox Code Playgroud)

它有效,但我需要这个输出:

dfjAAAAk
saljdfla
sjdfBBBBsadf
Run Code Online (Sandbox Code Playgroud)

所以我也需要包含“AAAA”和“BBBB”的行——而不仅仅是“from”和“to”它们。我怎样才能做到这一点?

JRF*_*son 6

您需要范围运算符。您也不需要“啜饮”您的文件。

STR='sla\ndfjAAAAk\nsaljdfla\nsjdfBBBBsadf\njasdf' 
echo -e ${STR} | perl -nE 'm{^dfjAAAAk}..m{^sjdfBBBB} and print'
dfjAAAAk
saljdfla
sjdfBBBBsadf
Run Code Online (Sandbox Code Playgroud)