El título lo dice todo: me gustaría obtener esas columnas de color claro de la salida de algo como ls -al
, por ejemplo, como en la respuesta de 10basetom a esta pregunta .
8
El título lo dice todo: me gustaría obtener esas columnas de color claro de la salida de algo como ls -al
, por ejemplo, como en la respuesta de 10basetom a esta pregunta .
sed
oawk
e insertar una secuencia de escape ANSI .Respuestas:
Esto es factible con
awk
. Desafortunadamente, dado que el formatols -l
no está especificado, no es posible encontrar una solución que funcione en todos los sistemas, por lo que algunos ajustes de qué color usar para qué columna serán necesarios en algunos sistemas.En primer lugar, queremos preservar los espacios originales utilizados por
ls -l
. De lo contrario, la alineación de la columna será incorrecta. Podemos hacer esto con laFPAT
opción, gracias a esta respuesta SO :En
awk
, cada parámetro posicional ($1
,$2
, etc.) se refiere a un campo, la columna uno es decir, en la fila actual. Lo que hizo laFPAT
opción anterior fue redefinir cada campo para incluir todos los espacios anteriores, de modo que cuandoprint
retrocede mantiene los espacios para que las columnas permanezcan en la misma posición.Ahora podemos simplemente editar cada campo para insertar el código de color y luego imprimir la salida editada:
Observe que cada columna se restablece a los valores predeterminados (
0
entre el[
ym
) después. Si desea que el color se ejecute en varias columnas, puede omitir ese código. Personalmente, prefiero especificar cada columna de forma independiente.Puede definir un comando reutilizable en su
.bashrc
. Por ejemplo:Es posible que deba reiniciar su
bash
sesión (o ejecutarsource ~/.bashrc
) para que se ejecute esta definición de función.Desde aquí, solo puede llamar
lsc
, lo que debería darle la salida que desea:fuente
--color=always
. Siempre que no aplique diferentes colores a la columna del nombre de archivo ($9
en mi ejemplo),awk
debería pasarlos.--color=always
es una extensión GNU, por lo que si está en un sistema que no es GNU (por ejemplo, macOS, otros BSD) deberá instalar la versión GNU o utilizar una alternativa .Esto imprimirá la segunda columna
ls -alF
en rojo, la tercera a octava en azul y la novena en negro:Esto solo pretende ser un ejemplo. Puede personalizar esto al contenido de su corazón.
Para aquellos que prefieren su código distribuido en varias líneas:
Detalles
tput
es una utilidad para generar una amplia variedad de códigos de control para su terminal. Por ejemplo,tput setaf n
establece el color de primer plano enn
donden
puede variar de 0 a 7Puede leer más sobre
tput
y sus capacidades de color aquí .El código awk define variables
black
,red
yblue
que contienen los códigos de terminal para negro, rojo y azul, respectivamente. Estos códigos se colocan al comienzo de cualquier columna que queramos colorear.Un truco es que los códigos de color no se restablecen por sí solos. Entonces, cualquiera que sea el último color que especifique en una línea, a menos que se especifique otro comando de color, será el color predeterminado para la siguiente línea.
fuente
awk
! Te sugiero que incluyas el patrón para preservar la alineación de la columna también :)FPAT
truco para mantener el espacio correcto.