Frage

Ich habe durch einige Protokolldateien wurden Parsen und ich habe festgestellt, dass einige der Linien zu lang sind eine Zeile angezeigt werden auf so Terminal.app freundlich sie auf die nächste Zeile umgebrochen. Aber ich habe nach einer Möglichkeit, eine Linie nach einer bestimmten Anzahl von Zeichen zu kürzen, so dass Klemme nicht wickeln, es viel leichter zu erkennen Muster zu machen.

Ich schrieb einen kleinen Perl-Skript, dies zu tun:

#!/usr/bin/perl

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

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

Aber ich habe das Gefühl, dass diese Funktionalität wahrscheinlich in einigen anderen Tools integriert ist (sed?) Das weiß ich nicht genau genug über für diese Aufgabe zu verwenden.

Also meine Frage Art einer umgekehrten Frage: Wie kann ich eine Zeile von stdin zu kürzen, ohne ein Programm zu schreiben, es zu tun

War es hilfreich?

Lösung

Rohrausgang:

cut -b 1-LIMIT

Wo LIMIT ist die gewünschte Linienbreite.

Andere Tipps

Eine andere Taktik verwende ich für die Anzeige Log-Dateien mit sehr langen Leitungen ist mit dem Rohr die Datei zu „weniger -S“. Die Option -S für weniger werden Linien drucken, ohne Verpackung, und Sie können durch Drücken der rechten Pfeiltaste.

den verborgenen Teil der langen Linien sehen

Nicht gerade die Frage zu beantworten, aber wenn man mit Perl halten will und verwenden Sie einen Einzeiler, eine Möglichkeit ist:

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

25, wo die gewünschte Zeilenlänge.

Der üblicher Weg, dies zu tun wäre,

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

golfed (für 5.10):

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

(Denken Sie daran nicht als Programmierung, betrachten Sie es als ein Kommandozeilen-Tool mit einer Vielzahl von Optionen.) (Ja, die python Referenz ist beabsichtigt.)

Eine Korn-Shell-Lösung (Kürzen bis 70 Zeichen - einfach zu parametrieren obwohl):

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

können Sie verwenden eine Variable gebunden, dass Clips seinen Inhalt auf eine feste Länge:

#! /usr/bin/perl -w

use strict;
use warnings
use String::FixedLen;

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

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

Dies ist nicht genau das, was Sie fordern, aber GNU Screen- ( mit OS X enthalten ist, wenn ich mich richtig erinnere, und gemeinsam auf anderen * nix-Systemen) können Sie Linie drehen Verpackung ein / aus (Ca r und Ca Cr). Auf diese Weise können Sie einfach die Größe Ihren Terminal statt Rohr Sachen durch ein Skript.

Bildschirm im Grunde gibt Sie "virtuelles" Terminals innerhalb einer Top-Level-Terminal-Anwendung.

use strict;
use warnings
use String::FixedLen;

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

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

Wenn ich den Punkt bin fehlt, wurde die UNIX „fold“ Befehl entwickelt, um genau das zu tun:

$ 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top