Question

J'ai analysé certains fichiers de log et j'ai constaté que certaines lignes sont trop longues pour s'afficher sur une seule ligne. Terminal.app les enrôle ainsi sur la ligne suivante. Cependant, je cherchais un moyen de tronquer une ligne après un certain nombre de caractères afin que Terminal ne soit pas renvoyé à la ligne, ce qui facilite grandement l'identification des motifs.

J'ai écrit un petit script Perl pour le faire:

#!/usr/bin/perl

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

while (<STDIN>)
{
    

J'ai analysé certains fichiers de log et j'ai constaté que certaines lignes sont trop longues pour s'afficher sur une seule ligne. Terminal.app les enrôle ainsi sur la ligne suivante. Cependant, je cherchais un moyen de tronquer une ligne après un certain nombre de caractères afin que Terminal ne soit pas renvoyé à la ligne, ce qui facilite grandement l'identification des motifs.

J'ai écrit un petit script Perl pour le faire:

<*>

Mais j’ai le sentiment que cette fonctionnalité est probablement intégrée à d’autres outils (sed?) que je ne connais pas suffisamment pour l’utiliser pour cette tâche.

Donc, ma question est en quelque sorte une question inverse: comment tronquer une ligne de stdin sans écrire un programme pour le faire?

= substr(

J'ai analysé certains fichiers de log et j'ai constaté que certaines lignes sont trop longues pour s'afficher sur une seule ligne. Terminal.app les enrôle ainsi sur la ligne suivante. Cependant, je cherchais un moyen de tronquer une ligne après un certain nombre de caractères afin que Terminal ne soit pas renvoyé à la ligne, ce qui facilite grandement l'identification des motifs.

J'ai écrit un petit script Perl pour le faire:

<*>

Mais j’ai le sentiment que cette fonctionnalité est probablement intégrée à d’autres outils (sed?) que je ne connais pas suffisamment pour l’utiliser pour cette tâche.

Donc, ma question est en quelque sorte une question inverse: comment tronquer une ligne de stdin sans écrire un programme pour le faire?

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

J'ai analysé certains fichiers de log et j'ai constaté que certaines lignes sont trop longues pour s'afficher sur une seule ligne. Terminal.app les enrôle ainsi sur la ligne suivante. Cependant, je cherchais un moyen de tronquer une ligne après un certain nombre de caractères afin que Terminal ne soit pas renvoyé à la ligne, ce qui facilite grandement l'identification des motifs.

J'ai écrit un petit script Perl pour le faire:

<*>

Mais j’ai le sentiment que cette fonctionnalité est probablement intégrée à d’autres outils (sed?) que je ne connais pas suffisamment pour l’utiliser pour cette tâche.

Donc, ma question est en quelque sorte une question inverse: comment tronquer une ligne de stdin sans écrire un programme pour le faire?

); print "

J'ai analysé certains fichiers de log et j'ai constaté que certaines lignes sont trop longues pour s'afficher sur une seule ligne. Terminal.app les enrôle ainsi sur la ligne suivante. Cependant, je cherchais un moyen de tronquer une ligne après un certain nombre de caractères afin que Terminal ne soit pas renvoyé à la ligne, ce qui facilite grandement l'identification des motifs.

J'ai écrit un petit script Perl pour le faire:

<*>

Mais j’ai le sentiment que cette fonctionnalité est probablement intégrée à d’autres outils (sed?) que je ne connais pas suffisamment pour l’utiliser pour cette tâche.

Donc, ma question est en quelque sorte une question inverse: comment tronquer une ligne de stdin sans écrire un programme pour le faire?

\n"; }

Mais j’ai le sentiment que cette fonctionnalité est probablement intégrée à d’autres outils (sed?) que je ne connais pas suffisamment pour l’utiliser pour cette tâche.

Donc, ma question est en quelque sorte une question inverse: comment tronquer une ligne de stdin sans écrire un programme pour le faire?

Était-ce utile?

La solution

Pipe la sortie vers:

cut -b 1-LIMIT

Où LIMIT correspond à la largeur de ligne souhaitée.

Autres conseils

Une autre tactique que j'utilise pour afficher les fichiers journaux avec de très longues lignes consiste à diriger le fichier vers "moins -S". L'option -S pour moins imprimera des lignes sans les envelopper, et vous pouvez voir la partie cachée des longues lignes en appuyant sur la touche flèche droite.

Ne répondez pas exactement à la question, mais si vous souhaitez rester avec Perl et utiliser une ligne, les possibilités sont les suivantes:

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

où 25 est la longueur de ligne souhaitée.

La manière habituelle de faire cela serait

perl -wlne'print substr(

La manière habituelle de faire cela serait

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

Golfé (pour 5.10):

<*>

(Ne le considérez pas comme une programmation, mais utilisez un outil de ligne de commande offrant un grand nombre d'options.) (Oui, le python la référence est intentionnelle.)

,0,80)'

Golfé (pour 5.10):

<*>

(Ne le considérez pas comme une programmation, mais utilisez un outil de ligne de commande offrant un grand nombre d'options.) (Oui, le python la référence est intentionnelle.)

Une solution de shell Korn (tronquée à 70 caractères - facile à paramétrer):

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

Vous pouvez utiliser une variable liée qui coupe son contenu selon une longueur fixe:

#! /usr/bin/perl -w

use strict;
use warnings
use String::FixedLen;

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

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

Ce n'est pas exactement ce que vous demandez, mais Écran GNU ( inclus avec OS X, si je me souviens bien, et commun sur d'autres systèmes * nix) vous permet d'activer / désactiver le retour à la ligne (Ca r et Ca Cr). De cette façon, vous pouvez simplement redimensionner votre terminal au lieu de transférer des éléments via un script.

L’écran vous donne essentiellement "virtuel". terminaux dans une application de terminal de niveau supérieur.

use strict;
use warnings
use String::FixedLen;

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

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

À moins que je manque le point, le "fold" " UNIX commande a été conçue pour faire exactement cela:

$ 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top