我有一个包含以下文本的文件:
@ 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