En Linux, ¿cómo trunco ​​la salida de la línea de comandos?

56

Si grep -nr sumthin *en mi directorio de código fuente, también arroja líneas muy largas de archivos JavaScript o CSS minificados. Quiero obtener solo los primeros 80 caracteres por línea.

Por ejemplo, un regular grepme da esto:

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.

pero me gustaría obtener esto en su lugar:

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

¿Qué comando de Linux puede hacer esto?

Nikki Erwin Ramirez
fuente
"minificado"? Qué significa eso?
CarlF
Gracias. El enlace correcto es en.wikipedia.org/wiki/Minification_%28programming%29
CarlF
Ambos enlaces conducen a la misma página para mí.
Victor

Respuestas:

80

Dios mío, me olvidé por completo cut!

grep -nr sumthin * | cut -c -80

^ hace el truco! > _ <

Nikki Erwin Ramirez
fuente
44
Eso no funciona si están involucradas secuencias de escape o códigos de color; tomar por ejemplogit log --oneline --graph --color=always | cut -c -$COLUMNS
badp
1
Entiendo que no se trunca exactamente en 80 caracteres mostrados, pero aún resuelve mi problema: ninguna de las líneas se ajusta, por lo que solo ve la parte inicial de cada línea (lo cual es importante en mi caso de uso específico, por lo que puede ver la <file>:<linenumber>salida de grep -n).
Nikki Erwin Ramirez
1
Los comentarios de confirmación largos también "rompen" un poco el resultado de su comando de muestra, si no se trunca. git log --oneline --graph --color=always | moremostrará el gráfico interrumpido por el texto envuelto. i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez
sí, es por eso que busqué en Google esta pregunta para empezar :)
badp
55
Si el propósito es solo poder ver bien las cosas visualmente (no redirigir la salida a algún lugar para su uso), entonces less -Ses lo que desea. -Ses --chop-long-lines. Básicamente, desactiva el ajuste de línea
entropía
5

Aparte de lo cutque puede usar fold(y en algunos casos fmt).
foldEs parte del coreutilspaquete.

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

foldno corta el texto restante, pero lo muestra en la siguiente línea.

Ivan c00kiemon5ter V Kanak
fuente
Gracias por esto, esto podría ser útil en el futuro. En mi caso, realmente quería cortar el texto, por lo que el file:linenumberprefijo de la grepsalida es contiguo, para un fácil escaneo a simple vista.
Nikki Erwin Ramirez
1

Si bien no es exactamente lo que desea hacer, puede usar awkpara imprimir un cierto número de columnas. Puede especificar que el delimitador sea ":" en este caso.

Sardathrion
fuente
Sin embargo, no hay un delimitador específico. Realmente estoy cortando la salida a una longitud específica, para que encaje en 1 línea en el terminal.
Nikki Erwin Ramirez
@Nikki luego corta es lo que quieres. Estoy seguro de que puedes hacer algo inteligente con awk para obtener lo mismo, pero en realidad, cortar es más fácil. ^ _-
Sardathrion