代码之家  ›  专栏  ›  技术社区  ›  Kyle Cronin

截断标准行长度?

  •  7
  • Kyle Cronin  · 技术社区  · 16 年前

    我一直在分析一些日志文件,发现有些行太长,无法在一行中显示,因此Terminal.app会将它们包装到下一行。然而,我一直在寻找一种方法,在一定数量的字符后截断一行,这样终端就不会换行,从而更容易发现模式。

    为此,我编写了一个小的Perl脚本:

    #!/usr/bin/perl
    
    die("need max length\n") unless $#ARGV == 0;
    
    while (<STDIN>)
    {
        $_ = substr($_, 0, $ARGV[0]);
        chomp($_);
        print "$_\n";
    }
    

    但我有一种感觉,这项功能可能是内置在其他一些工具(sed?)中的,我只是不知道如何使用这些工具来完成这项任务。

    所以我的问题是一个相反的问题:如何在不编写程序的情况下截断一行stdin?

    9 回复  |  直到 5 年前
        1
  •  12
  •   nobody    16 年前

    管道输出到:

    cut -b 1-LIMIT
    

    其中LIMIT是所需的线宽。

        2
  •  11
  •   nobody    16 年前

        3
  •  2
  •   Jason Plank dvancouver    13 年前

    不完全回答这个问题,但如果您想坚持使用Perl并使用一行程序,则有可能:

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

        4
  •  0
  •   ysth    16 年前

    通常的做法是

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

    Golfed(适用于5.10):

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

    (不要将其视为编程,而应将其视为使用具有大量选项的命令行工具。) python

        5
  •  0
  •   runrig    16 年前

    typeset -L70 line
    while read line
    do
      print $line
    done
    
        6
  •  0
  •   dland    16 年前

    可以使用绑定变量将其内容剪裁为固定长度:

    #! /usr/bin/perl -w
    
    use strict;
    use warnings
    use String::FixedLen;
    
    tie my $str, 'String::FixedLen', 4;
    
    while (defined($str = <>)) {
        chomp;
        print "$str\n";
    }
    
        7
  •  0
  •   Sam Martin    16 年前

    这不是你想要的,但是 GNU Screen (如果我没记错的话,OSX附带,在其他*nix系统上很常见)允许您打开/关闭换行(C-a r和C-a C-r)。通过这种方式,您可以简单地调整终端的大小,而不是通过脚本管道传输内容。

        8
  •  0
  •   Jason Plank dvancouver    13 年前
    use strict;
    use warnings
    use String::FixedLen;
    
    tie my $str, 'String::FixedLen', 4;
    
    while (defined($str = <>)) {
        chomp;
        print "$str\n";
    }
    
        9
  •  0
  •   Ed Morton    12 年前

    除非我没有抓住要点,否则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