¿Util para recortar la salida al ancho del terminal?


12

Cuando lo hago

ps aux

La salida se recorta muy bien al ancho de mi terminal, de modo que las descripciones largas del proceso no requieren más de una línea. Sin embargo, si lo canalizo a otra cosa, las largas colas vuelven.

Me doy cuenta de que este es un comportamiento adecuado, ya que ps ya no se está emitiendo a un tty y toda la salida puede ser crucial para el procesamiento. Lo que quiero es otra utilidad que recortará la salida cuando termine.

Quiero poder hacer algo como esto:

ps aux | grep -v 'www-data' | nowrap  

nowrapes la herramienta imaginaria que estoy buscando. Se asegurará de que las líneas largas se recorten y no se desborden.

¿Hay algo como esto?

Respuestas:


15

Puede usar el cutcomando para cortar la salida. Por ejemplo:

ps aux | grep -v 'www-data' | cut -c-80

Esto mantendrá solo los primeros 80 caracteres de cada línea. Por supuesto, puede establecerlo en el ancho que desee.

Si usa la línea de comando bash, puede hacer esto:

ps aux | grep -v 'www-data' | cut -c-$COLUMNS

Si la salida tiene pestañas, es posible que el ancho no se calcule correctamente. expandpuede convertir las pestañas en espacios:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS

1
... y si quieres que tu salida sea coloreada por grep (como yo), cutprimero y grepluego.
DerMike

Y agregué un alias en mi archivo ~ / .bash_aliases: alias cutt = 'cut -c - $ COLUMNS'. Ahora puedo simplemente cortar para cortar ...
Samuel Lampa

1
Esto se comporta mal si hay pestañas en la salida. ¿Alguna sugerencia? Una opción es convertir las pestañas en espacios primero, pero sería bueno evitar esto, en caso de que deseamos conservar las pestañas para más adelante en la tubería.
Aaron McDaid

2
Encontré expandy edité la respuesta para incluirla. Corrige por pestaña
Aaron McDaid

3

Puede recortar la salida usando cut. p.ej

ps aux | grep -v 'www-data' | corte -c1 - $ {COLUMNAS}

donde ${COLUMNS}proporciona el ancho actual de la terminal. El resizecomando se puede usar para volver a generar el ancho actual:

$ resize
COLUMNS=80;
LINES=24;
export COLUMNS LINES;

Podrías, si quisieras automatizar esto, resumirlo en un script nowrap:

#!/bin/bash

eval "export $(resize | grep 'COLUMNS=')"
cut -c1-${COLUMNS} -

2

Y además de lo que dijo Nagul, puedes usar en bash:

tput cols

para obtener el ancho:

COLUMNAS = $ (tput cols)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.