Pregunta

He estado analizando algunos archivos de registro y he descubierto que algunas de las líneas son demasiado largas para mostrarse en una línea, por lo que Terminal.app las envuelve en la siguiente línea. Sin embargo, he estado buscando una manera de truncar una línea después de un cierto número de caracteres para que la Terminal no se ajuste, lo que hace que sea mucho más fácil detectar patrones.

Escribí un pequeño script de Perl para hacer esto:

#!/usr/bin/perl

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

while (<STDIN>)
{
    

He estado analizando algunos archivos de registro y he descubierto que algunas de las líneas son demasiado largas para mostrarse en una línea, por lo que Terminal.app las envuelve en la siguiente línea. Sin embargo, he estado buscando una manera de truncar una línea después de un cierto número de caracteres para que la Terminal no se ajuste, lo que hace que sea mucho más fácil detectar patrones.

Escribí un pequeño script de Perl para hacer esto:

<*>

Pero tengo la sensación de que esta funcionalidad probablemente está incorporada en algunas otras herramientas (sed?) de las que no tengo suficientes conocimientos para usar en esta tarea.

Entonces, mi pregunta es una especie de pregunta inversa: ¿cómo trunco ??una línea de entrada estándar sin escribir un programa para hacerlo?

= substr(

He estado analizando algunos archivos de registro y he descubierto que algunas de las líneas son demasiado largas para mostrarse en una línea, por lo que Terminal.app las envuelve en la siguiente línea. Sin embargo, he estado buscando una manera de truncar una línea después de un cierto número de caracteres para que la Terminal no se ajuste, lo que hace que sea mucho más fácil detectar patrones.

Escribí un pequeño script de Perl para hacer esto:

<*>

Pero tengo la sensación de que esta funcionalidad probablemente está incorporada en algunas otras herramientas (sed?) de las que no tengo suficientes conocimientos para usar en esta tarea.

Entonces, mi pregunta es una especie de pregunta inversa: ¿cómo trunco ??una línea de entrada estándar sin escribir un programa para hacerlo?

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

He estado analizando algunos archivos de registro y he descubierto que algunas de las líneas son demasiado largas para mostrarse en una línea, por lo que Terminal.app las envuelve en la siguiente línea. Sin embargo, he estado buscando una manera de truncar una línea después de un cierto número de caracteres para que la Terminal no se ajuste, lo que hace que sea mucho más fácil detectar patrones.

Escribí un pequeño script de Perl para hacer esto:

<*>

Pero tengo la sensación de que esta funcionalidad probablemente está incorporada en algunas otras herramientas (sed?) de las que no tengo suficientes conocimientos para usar en esta tarea.

Entonces, mi pregunta es una especie de pregunta inversa: ¿cómo trunco ??una línea de entrada estándar sin escribir un programa para hacerlo?

); print "

He estado analizando algunos archivos de registro y he descubierto que algunas de las líneas son demasiado largas para mostrarse en una línea, por lo que Terminal.app las envuelve en la siguiente línea. Sin embargo, he estado buscando una manera de truncar una línea después de un cierto número de caracteres para que la Terminal no se ajuste, lo que hace que sea mucho más fácil detectar patrones.

Escribí un pequeño script de Perl para hacer esto:

<*>

Pero tengo la sensación de que esta funcionalidad probablemente está incorporada en algunas otras herramientas (sed?) de las que no tengo suficientes conocimientos para usar en esta tarea.

Entonces, mi pregunta es una especie de pregunta inversa: ¿cómo trunco ??una línea de entrada estándar sin escribir un programa para hacerlo?

\n"; }

Pero tengo la sensación de que esta funcionalidad probablemente está incorporada en algunas otras herramientas (sed?) de las que no tengo suficientes conocimientos para usar en esta tarea.

Entonces, mi pregunta es una especie de pregunta inversa: ¿cómo trunco ??una línea de entrada estándar sin escribir un programa para hacerlo?

¿Fue útil?

Solución

Salida de tubería a:

cut -b 1-LIMIT

Donde LÍMITE es el ancho de línea deseado.

Otros consejos

Otra táctica que utilizo para ver archivos de registro con líneas muy largas es canalizar el archivo a " less -S " La opción -S por menos imprimirá líneas sin ajuste, y puede ver la parte oculta de las líneas largas presionando la tecla de flecha derecha.

No es exactamente la respuesta a la pregunta, pero si quieres mantenerte con Perl y usar una sola línea, la posibilidad es:

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

donde 25 es la longitud de línea deseada.

La forma habitual de hacer esto sería

perl -wlne'print substr(

La forma habitual de hacer esto sería

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

Golfed (para 5.10):

<*>

(No lo piense como una programación, piense que se trata de una herramienta de línea de comandos con una gran cantidad de opciones). (Sí, la python la referencia es intencional.)

,0,80)'

Golfed (para 5.10):

<*>

(No lo piense como una programación, piense que se trata de una herramienta de línea de comandos con una gran cantidad de opciones). (Sí, la python la referencia es intencional.)

Una solución de shell Korn (truncando a 70 caracteres, aunque es fácil de parametrizar):

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

Puede usar una variable vinculada que recorta su contenido a una longitud fija:

#! /usr/bin/perl -w

use strict;
use warnings
use String::FixedLen;

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

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

Esto no es exactamente lo que está pidiendo, pero Pantalla GNU ( incluido con OS X, si recuerdo correctamente, y común en otros sistemas * nix) le permite activar / desactivar el ajuste de línea (Ca r y Ca Cr). De esa manera, simplemente puede cambiar el tamaño de su terminal en lugar de canalizar cosas a través de un script.

La pantalla básicamente te da " virtual " terminales dentro de una aplicación de terminal de un nivel superior.

use strict;
use warnings
use String::FixedLen;

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

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

A menos que me esté perdiendo el punto, el UNIX " fold " El comando fue diseñado para hacer exactamente eso:

$ 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top