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 .
sedoawke insertar una secuencia de escape ANSI .Respuestas:
Esto es factible con
awk. Desafortunadamente, dado que el formatols -lno 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 laFPATopció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 laFPATopción anterior fue redefinir cada campo para incluir todos los espacios anteriores, de modo que cuandoprintretrocede 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 (
0entre 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
bashsesió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 ($9en mi ejemplo),awkdebería pasarlos.--color=alwayses 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 -alFen 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
tputes una utilidad para generar una amplia variedad de códigos de control para su terminal. Por ejemplo,tput setaf nestablece el color de primer plano enndondenpuede variar de 0 a 7Puede leer más sobre
tputy sus capacidades de color aquí .El código awk define variables
black,redyblueque 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 :)FPATtruco para mantener el espacio correcto.