如何截断 STDIN 行长度?
我一直在解析一些日志文件,发现有些行太长,无法在一行上显示,因此 Terminal.app 会善意地将它们包装到下一行。 但是,我一直在寻找一种在一定数量的字符之后截断一行的方法,以便终端不会换行,从而更容易发现模式。
我编写了一个小的 Perl 脚本来执行此操作:
#!/usr/bin/perl
die("need max length\n") unless $#ARGV == 0;
while (<STDIN>)
{
$_ = substr($_, 0, $ARGV[0]);
chomp($_);
print "$_\n";
}
但我有一种感觉,此功能可能内置于其他一些工具(sed?)中,我只是不太了解如何用于此任务。
所以我的问题有点相反:如何在不编写程序的情况下截断一行标准输入?
I've been parsing through some log files and I've found that some of the lines are too long to display on one line so Terminal.app kindly wraps them onto the next line. However, I've been looking for a way to truncate a line after a certain number of characters so that Terminal doesn't wrap, making it much easier to spot patterns.
I wrote a small Perl script to do this:
#!/usr/bin/perl
die("need max length\n") unless $#ARGV == 0;
while (<STDIN>)
{
$_ = substr($_, 0, $ARGV[0]);
chomp($_);
print "$_\n";
}
But I have a feeling that this functionality is probably built into some other tools (sed?) That I just don't know enough about to use for this task.
So my question sort of a reverse question: how do I truncate a line of stdin Without writing a program to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(9)
这并不完全是您所要求的,但是 GNU Screen (包含在操作系统中) X(如果我没记错的话,在其他 *nix 系统上很常见)可以让您打开/关闭换行(Car 和 Ca Cr)。 这样,您可以简单地调整终端的大小,而不用通过脚本传递内容。
Screen 基本上为您提供了一个顶级终端应用程序中的“虚拟”终端。
除非我没有抓住要点,UNIX 的“fold”命令就是为了做到这一点而设计的:
$ cat file
the quick brown fox jumped over the lazy dog's back
$ fold -w20 file
the quick brown fox
jumped over the lazy
dog's back
$ fold -w10 file
the quick
brown fox
jumped ove
r the lazy
dog's bac
k
$ fold -s -w10 file
the quick
brown fox
jumped
over the
lazy
dog's back
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
通过管道输出到:
其中 LIMIT 是所需的线宽。
Pipe output to:
Where LIMIT is the desired line width.