如何在 Perl 标量中只保留前五行?
对于任何类型的标量,我可以使用什么正则表达式来匹配它的前五行并丢弃其余的?
From any kind of scalar, what regex could I use to match the first five lines of it and discard the rest?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
奇怪的请求,但这应该可以做到:
更常见的解决方案是这样的:
Odd request, but this should do it:
A more common solution would be something like this:
为什么不直接使用
head
呢?Why don't you just use
head
for that?你不需要正则表达式。 只需打开标量引用上的文件句柄,然后执行与任何其他类型的文件句柄相同的操作:
You don't need a regex. Just open a filehandle on a reference to the scalar then do the same things that you would for any other sort of filehandle:
正如 Brian 所说,您可以轻松地使用
head
或tail
来解决任一问题(前 5 行或后 5 行)。但现在我想知道我是否正确理解了你的问题。 当您说“对于任何类型的标量”时,您的意思是(无论出于何种原因)文件已经处于标量中吗?
如果没有,我认为最好的解决方案是根本没有正则表达式。 使用
$.
并正常读取文件或向后。 要向后阅读,您可以尝试File::ReadBackwards< /code>
或
文件::双向
。As Brian says, you can use
head
ortail
pretty easily for either problem (first 5 lines or last 5 lines).But now I'm wondering if I even understand your question correctly. When you say "for any kind of scalar", do you mean that (for whatever reason) the file is already in a scalar?
If not, I think that the best solution is no regex at all. Use
$.
and either read the file normally or backwards. To read backwards, you can tryFile::ReadBackwards
orFile::Bidirectional
.人们缺少一些关键标志:
如果没有多行标志,它只会查看第一行。 另外,通过将
\n
设置为可选,我们可以获取前五行行,而不管第五行末尾是否有换行符。People are missing some key flags:
Without the multi-line flag, it's only going to look at the first line. Also by making the
\n
optional, we can take the first five lines, regardless of a newline at the end of the fifth.为什么不只使用带有限制的 split,它是为此目的而设计的:
如果您希望将其返回为具有五行的单个标量,请将其连接起来:
Why not just use split with a limit, it's designed for this purpose:
If you want that back as a single scalar with five lines, join it back up: