保存文件中两个给定字符之间的文本并将输出保存到文件?

保存文件中两个给定字符之间的文本并将输出保存到文件?

我有一个包含以下文本的文件:

@ heading with some text
the.actual.text.of.choice
which.can.be.several.lines
in.length.with.no.pattern
+
more.text.that.i.want.to
remove.several.lines.long

我尝试了以下方法:

perl -pe '^@ .* $+' input_file.txt > output_file.txt

我读到的是:“行首为 @,后跟任意数量的字符,行末以 + 结尾”。但我收到以下错误:

syntax error at -e line 1, near "^"
Execution of -e aborted due to compilation errors.

由于我对正则表达式还不太熟悉,您能告诉我哪里错了吗?有没有办法直接用 来做grep?也许用-f-E选项?

答案1

do{local $/; <STDIN>}将所有输入读入一个字符串。

=~ /^@[^+]+\+/gm将字符串与正则表达式匹配(以 开头的行@,后跟除 之外的任意字符+,以 结尾+)。

print $&打印整个匹配项。

cat input_file.txt | perl -e 'do{local $/; <STDIN>} =~ /^@[^+]+\+/gm; print $&' > output_file.txt

相关内容