2009-10-23 6 views

Répondre

19

Notez que cut accepte un nom de fichier comme argument.

Cela semble fonctionner pour moi:

watch 'bash -c "cut -c -$COLUMNS file"' 

Pour les tests, j'ai ajouté une marge de droite:

watch 'bash -c "cut -c -$(($COLUMNS-10)) file"' 

Quand je redimensionné mon terminal, la troncature a été mis à jour pour correspondre.

+0

Lorsque je lance votre script 'watch./Colscript', j'en vois 80 affichés. Quand je change la largeur en faisant glisser le bord de la fenêtre (j'utilise PuTTY) le nombre change pour correspondre. Que vois-tu? –

+0

Je ne vois rien, mais j'ai compris pourquoi: différentes versions de bash. ./colscript fonctionne sur bash 4.0 (mon ordinateur), mais pas sur bash 3.0 (un ordinateur distant). ./colscript ne fonctionne sur aucune des deux versions. – Alexandru

+0

'echo $ BASH_VERSION' me donne" 3.2.48 (1) -release "La raison pour laquelle exécuter'./Colscript' depuis la ligne de commande fait écho à une ligne vide est que '$ COLUMNS' est seulement rempli pour les shells interactifs. Vous pouvez essayer d'ajouter '-i' à la fin de la première ligne de'./Colscript' pour avoir '#!/Bin/bash -i' –

34

Vous pouvez rechercher fmt:

fmt file 

Cette reformate assez agressivement votre texte, il peut faire plus que ce que vous voulez.

En variante, la commande cut peut réduire le texte à une largeur de colonne spécifique, moins jeter au-delà de la marge de droite:

cat file | cut -c1-80 

Une autre option pratique est la commande less -S, qui affiche un fichier dans une fenêtre de l'écran complet avec gauche/défilement bon pour les longues lignes:

less -S file 
+0

En effet, il fait plus que ce que je veux: il lignes concaténer. – Alexandru

+0

En fait, je regarde le contenu du fichier à l'aide de la montre "fichier cat", donc je ne peux pas utiliser moins. fichier cat | couper -c1-80 a fait l'affaire, en partie. Un moyen d'ajuster la coupe à la taille de l'écran? – Alexandru

+2

Vous pouvez avoir la variable d'environnement '$ COLUMNS' définie: try ' cut -c1- $ COLUMNS file' – mob

5

comme indiqué par d'autres, la réponse est cut -c ..., mais d'ajouter une dynamique, je préfère ceci:

cat file.txt |cut -c -$(tput cols)

2

pour basculer à long retour à la ligne en moins. La valeur par défaut est d'envelopper.

- `less file` 
- in file type `"-S"` to toggle to truncate on line width 
- to toggle back `"-S"` again. 
+0

Vous pouvez également appeler' less' avec '-S' en option : 'less -S file' ou l'inclure dans votre environnement:' export LESS = "- S" '(plus d'autres options). Dans les deux cas, vous pouvez toujours utiliser la bascule une fois qu'elle est en cours d'exécution si vous le souhaitez. –

1

L'utilisation de cut ne tient pas compte du fait que les onglets sont considérés comme un seul caractère \t mais ils sont imprimés en 8 espaces vides. Ainsi, un fichier avec des onglets sera coupé à différentes colonnes perçues.

less -S tronque de façon optimale le texte, également en présence d'onglets, mais AFAIK il ne peut pas être utilisé pour imprimer de façon non interactive le fichier "haché".

Une solution de travail est de convertir les onglets dans des espaces par expand puis cut la sortie: expand < file | cut -c -$(tput cols)

+0

'expand' est une aide précieuse; merci, je ne faisais que lutter avec ce problème (avec des onglets). Content de faire défiler vers le bas! – Lambart

Questions connexes