Sous Linux, comment tronquer la sortie en ligne de commande?


56

Si je suis grep -nr sumthin *dans mon répertoire de code source, il génère également de très longues lignes à partir de fichiers JavaScript ou CSS minifiés. Je veux obtenir uniquement les 80 premiers caractères par ligne.

Par exemple, un habitué grepme donne ceci:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:10px;z-index:13;}.arrow2{cursor:pointer;position:absolute;right:5px;bottom:10px;z-index:13;}.calendarModule{z-index:100;}.calendarFooterContainer{height:25px;text-align:center;width:100%!important;z-index:15;position:relative;font-size:15px!important;padding:-2px 0 3px 0;clear:both!important;border-left:1px solid #CCC;border-right:1px  ... etc.

mais j'aimerais juste avoir ceci à la place:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:

Quelle commande Linux peut faire cela?


"minified"? Qu'est-ce que ça veut dire?
CarlF



Les deux liens mènent à la même page pour moi.
Victor

Réponses:


80

OMG, j'ai totalement oublié à propos cut!

grep -nr sumthin * | cut -c -80

^ fait le tour! > _ <


4
Cela ne fonctionne pas si des séquences d'échappement ou des codes de couleur sont impliqués; prendre par exemplegit log --oneline --graph --color=always | cut -c -$COLUMNS
badp

1
J'obtiens qu'il ne tronque pas exactement 80 caractères affichés, mais cela résout mon problème: aucune des lignes n'est renvoyée à la ligne, de sorte que vous ne voyez toujours que la partie en tête de chaque ligne (ce qui est important dans mon cas d'utilisation spécifique, donc je peut voir la <file>:<linenumber>sortie de grep -n).
Nikki Erwin Ramirez

1
Les commentaires de validation longs peuvent aussi "casser" la sortie de votre exemple de commande, si elle n'est pas tronquée. git log --oneline --graph --color=always | moremontrera le graphique interrompu par le texte enveloppé. i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez

oui, c'est pourquoi j'ai
Badp

5
Si less -Svous souhaitez simplement voir les choses de manière visuelle (sans rediriger la sortie quelque part pour l'utiliser), c'est ce que vous voulez. -Sest --chop-long-lines. En gros, cela désactive le retour à la ligne
entropie

5

Autre que cutvous pouvez utiliser fold(et dans certains cas fmt).
foldfait partie du coreutilspackage.

$ echo "some very long long long text" | fold -w 5   # fold on 5 chars per line
some 
very 
long 
long 
long 
text

foldne coupe pas le texte restant, mais le sort sur la ligne suivante.


Merci pour cela, cela pourrait être utile dans le futur. Dans mon cas, je voulais vraiment couper le texte, donc le file:linenumberpréfixe de la grepsortie est contigu, pour faciliter la lecture à l'œil.
Nikki Erwin Ramirez

1

Bien que ce ne soit pas exactement ce que vous voulez faire, vous pouvez utiliser awkpour imprimer un certain nombre de colonnes. Vous pouvez spécifier que le délimiteur soit ":" dans ce cas.


Il n'y a pas de délimiteur spécifique, cependant. Je coupe vraiment la sortie à une longueur spécifique, pour qu'elle tienne dans une ligne du terminal.
Nikki Erwin Ramirez

@ Nikki alors couper est ce que vous voulez. Je suis sûr que vous pouvez faire quelque chose d'intelligent avec awk pour obtenir la même chose, mais en réalité, couper est plus facile. ^ _-
Sardathrion le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.