Domanda

Ho analizzato alcuni file di registro e ho scoperto che alcune delle righe sono troppo lunghe per essere visualizzate su una riga, quindi Terminal.app le avvolge gentilmente sulla riga successiva. Tuttavia, ho cercato un modo per troncare una riga dopo un certo numero di caratteri in modo che Terminal non si avvolga, rendendo molto più facile individuare i pattern.

Ho scritto un piccolo script Perl per fare questo:

#!/usr/bin/perl

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

while (<STDIN>)
{
    

Ho analizzato alcuni file di registro e ho scoperto che alcune delle righe sono troppo lunghe per essere visualizzate su una riga, quindi Terminal.app le avvolge gentilmente sulla riga successiva. Tuttavia, ho cercato un modo per troncare una riga dopo un certo numero di caratteri in modo che Terminal non si avvolga, rendendo molto più facile individuare i pattern.

Ho scritto un piccolo script Perl per fare questo:

<*>

Ma ho la sensazione che questa funzionalità sia probabilmente incorporata in alcuni altri strumenti (sed?) che non conosco abbastanza da usare per questo compito.

Quindi la mia domanda è una specie di domanda inversa: come faccio a troncare una linea di stdin senza scrivere un programma per farlo?

= substr(

Ho analizzato alcuni file di registro e ho scoperto che alcune delle righe sono troppo lunghe per essere visualizzate su una riga, quindi Terminal.app le avvolge gentilmente sulla riga successiva. Tuttavia, ho cercato un modo per troncare una riga dopo un certo numero di caratteri in modo che Terminal non si avvolga, rendendo molto più facile individuare i pattern.

Ho scritto un piccolo script Perl per fare questo:

<*>

Ma ho la sensazione che questa funzionalità sia probabilmente incorporata in alcuni altri strumenti (sed?) che non conosco abbastanza da usare per questo compito.

Quindi la mia domanda è una specie di domanda inversa: come faccio a troncare una linea di stdin senza scrivere un programma per farlo?

, 0, $ARGV[0]); chomp(

Ho analizzato alcuni file di registro e ho scoperto che alcune delle righe sono troppo lunghe per essere visualizzate su una riga, quindi Terminal.app le avvolge gentilmente sulla riga successiva. Tuttavia, ho cercato un modo per troncare una riga dopo un certo numero di caratteri in modo che Terminal non si avvolga, rendendo molto più facile individuare i pattern.

Ho scritto un piccolo script Perl per fare questo:

<*>

Ma ho la sensazione che questa funzionalità sia probabilmente incorporata in alcuni altri strumenti (sed?) che non conosco abbastanza da usare per questo compito.

Quindi la mia domanda è una specie di domanda inversa: come faccio a troncare una linea di stdin senza scrivere un programma per farlo?

); print "

Ho analizzato alcuni file di registro e ho scoperto che alcune delle righe sono troppo lunghe per essere visualizzate su una riga, quindi Terminal.app le avvolge gentilmente sulla riga successiva. Tuttavia, ho cercato un modo per troncare una riga dopo un certo numero di caratteri in modo che Terminal non si avvolga, rendendo molto più facile individuare i pattern.

Ho scritto un piccolo script Perl per fare questo:

<*>

Ma ho la sensazione che questa funzionalità sia probabilmente incorporata in alcuni altri strumenti (sed?) che non conosco abbastanza da usare per questo compito.

Quindi la mia domanda è una specie di domanda inversa: come faccio a troncare una linea di stdin senza scrivere un programma per farlo?

\n"; }

Ma ho la sensazione che questa funzionalità sia probabilmente incorporata in alcuni altri strumenti (sed?) che non conosco abbastanza da usare per questo compito.

Quindi la mia domanda è una specie di domanda inversa: come faccio a troncare una linea di stdin senza scrivere un programma per farlo?

È stato utile?

Soluzione

Invia pipe a:

cut -b 1-LIMIT

Dove LIMIT è la larghezza della linea desiderata.

Altri suggerimenti

Un'altra tattica che uso per visualizzare i file di registro con righe molto lunghe è quella di reindirizzare il file a "meno -S". L'opzione -S per meno stamperà le linee senza avvolgere e puoi visualizzare la parte nascosta delle linee lunghe premendo il tasto freccia destra.

Non esattamente rispondendo alla domanda, ma se vuoi restare con Perl e usare una linea, una possibilità è:

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

dove 25 è la lunghezza della linea desiderata.

Il solito modo per farlo sarebbe

perl -wlne'print substr(

Il solito modo per farlo sarebbe

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

Golfed (per 5.10):

<*>

(Non pensarlo come una programmazione, pensalo come usare uno strumento da riga di comando con un numero enorme di opzioni.) (Sì, python il riferimento è intenzionale.)

,0,80)'

Golfed (per 5.10):

<*>

(Non pensarlo come una programmazione, pensalo come usare uno strumento da riga di comando con un numero enorme di opzioni.) (Sì, python il riferimento è intenzionale.)

Una soluzione shell Korn (troncando a 70 caratteri - facile da parametrizzare):

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

Puoi usare una variabile legata che ritaglia il suo contenuto a una lunghezza fissa:

#! /usr/bin/perl -w

use strict;
use warnings
use String::FixedLen;

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

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

Questo non è esattamente quello che stai chiedendo, ma GNU Screen ( incluso con OS X, se ricordo bene, e comune su altri sistemi * nix) consente di attivare / disattivare il ritorno a capo (Ca r e Ca Cr). In questo modo, puoi semplicemente ridimensionare il tuo terminale invece di eseguire il piping delle cose tramite uno script.

Lo schermo in pratica ti dà "virtuale" terminali all'interno di un'applicazione terminale di livello superiore.

use strict;
use warnings
use String::FixedLen;

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

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

A meno che non mi manchi il punto, UNIX " fold " Il comando è stato progettato per fare esattamente questo:

$ 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top