如何截断STDIN线长度是多少?(How to truncate STDIN line length

2019-07-04 14:55发布

我一直在通过解析一些日志文件,我已经发现,某些行太长,所以敬请Terminal.app它们包装到下一行上显示一行。 不过,我一直在寻找一种方式来截断一定数目的字符,使终端不换行的后面的线,使得它更容易发现其中的规律。

我写了一个小Perl脚本来做到这一点:

#!/usr/bin/perl

die("need max length\n") unless $#ARGV == 0;

while (<STDIN>)
{
    $_ = substr($_, 0, $ARGV[0]);
    chomp($_);
    print "$_\n";
}

但是我有一种感觉,这个功能可能被内置到一些其他的工具(SED?),我只是不知道有足够的了解使用此任务。

所以我的问题排序相反的问题:我怎么截断线标准输入的不编写一个程序来做到这一点?

Answer 1:

管的输出:

cut -b 1-LIMIT

其中限制是所期望的线宽度。



Answer 2:

我使用的浏览很长的线日志文件另一个策略是管道中的文件,以“少-S”。 少-S选项将打印线没有包装,你可以通过按下右箭头键查看排长队隐藏的部分。



Answer 3:

不完全回答这个问题,但如果你想坚持使用Perl和使用一个内胆,一种可能性是:

$ perl -pe's/(?<=.{25}).*//' filename

其中图25是所希望的线的长度。



Answer 4:

通常的方式做这将是

perl -wlne'print substr($_,0,80)'

Golfed(5.10):

perl -nE'say/(.{0,80})/'

(不要把它想成编程,认为它是使用带有选项的数量庞大的一个命令行工具。)(是的, 蟒蛇参考是故意的。)



Answer 5:

一个Korn shell的溶液(截断为70个字符 - 容易,虽然参数):

typeset -L70 line
while read line
do
  print $line
done


Answer 6:

您可以使用捆绑变量,剪辑其内容为固定长度:

#! /usr/bin/perl -w

use strict;
use warnings
use String::FixedLen;

tie my $str, 'String::FixedLen', 4;

while (defined($str = <>)) {
    chomp;
    print "$str\n";
}


Answer 7:

这不是你问什么了,但GNU屏幕 (包括在OS X,如果我没有记错,以及其他* nix系统常见),让您打开自动换行开/关(CA R和钙铬)。 这样一来,你可以简单地通过脚本调整你的终端,而不是管道的东西。

屏幕基本上给出了一个顶级终端应用程序中,你的“虚拟”终端。



Answer 8:

use strict;
use warnings
use String::FixedLen;

tie my $str, 'String::FixedLen', 4;

while (defined($str = <>)) {
    chomp;
    print "$str\n";
}


Answer 9:

除非我错过了点,UNIX的“折叠”命令的目的是要做到这些:

$ 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


文章来源: How to truncate STDIN line length?