Perl 一行打印除最后一行以外的所有内容

标签 perl

我有一个文件。我想打印除最后一行以外的所有行。我们如何使用 Perl 代码来做到这一点?

这是行不通的:

cat file|perl -lane 'print if not eof()'

不好意思,这是行得通的。我没有仔细查看我的输出。

seq 1 6 | perl -lane 'print if not eof()'
1
2
3
4
5

最佳答案

如果需要在命令行上执行此操作,可以使用 shell 命令 head。负数行将显示除最后 N 行以外的所有行。

head --lines=-1 filename

这是一个 GNU 扩展,不适用于 BSD head,例如 OS X 附带的 stock head。

对于Perl,您的代码基本正确,但没有必要涉及cat。否则,您将读取该文件两次。您可以直接传递文件名。此外 -l 实际上什么也不做,从输入中剥离换行符并将其放回输出中。最后,不需要 -a,因为这会浪费地将每一行拆分为未使用的 @F

perl -ne 'print if not eof' filename

关于Perl 一行打印除最后一行以外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7296898/

相关文章:

sql - Cronjob 不在 perl 脚本中执行命令行

perl - Perl 中数组的哈希值 : traversal and deletion

perl - 在 Perl 中优雅地解析刚性数据

perl - 如何在 Perl 中使用 STDIN?

perl - 没有在 perl 类中定义 DESTROY 方法是否有内存泄漏的风险?

json - 尝试将其作为调试运行以对其进行测试时出现 ddclient 错误

perl - 为什么 Perl 的 chomp 会影响我的打印输出?

Perl for循环批量迭代

perl - 如何在 Perl 中替换日期?

perl - 在 Perl 中,为什么我不能祝福包含对文字的引用的变量?