Isso é factível com awk
. Infelizmente, como o formato de ls -l
não é especificado, não é possível encontrar uma solução que funcione em todos os sistemas, portanto, algum ajuste de qual cor será usada em qual coluna será necessária em alguns sistemas.
Primeiramente, queremos preservar os espaços originais usados por ls -l
. Caso contrário, o alinhamento da coluna estará incorreto. Podemos fazer isso com a opção FPAT
, graças a esta resposta SO :
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
Em awk
, cada parâmetro posicional ( $1
, $2
, etc.) refere-se a um campo, ou seja, uma coluna na linha atual. O que a opção FPAT
fez foi redefinir cada campo para incluir todos os espaços anteriores, então, quando você print
voltar, ele manterá os espaços para que as colunas fiquem na mesma posição.
Agora podemos simplesmente editar cada campo para inserir o código de cor e, em seguida, imprimir a saída editada:
{
$2 = "3[31m" $2 "3[0m";
$3 = "3[36m" $3 "3[0m";
$4 = "3[36m" $4 "3[0m";
$5 = "3[31m" $5 "3[0m";
$6 = "3[36m" $6 "3[0m";
$7 = "3[36m" $7 "3[0m";
$8 = "3[31m" $8 "3[0m";
print
}
'
Observe que cada coluna é redefinida para o padrão (o 0
entre o [
e m
) depois. Se você quiser que a cor seja executada em várias colunas, poderá omitir esse código. Pessoalmente, prefiro especificar cada coluna independentemente.
Você pode definir o comando reutilizável em .bashrc
. Por exemplo:
lsc() {
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
{
$2 = "3[31m" $2 "3[0m";
$3 = "3[36m" $3 "3[0m";
$4 = "3[36m" $4 "3[0m";
$5 = "3[31m" $5 "3[0m";
$6 = "3[36m" $6 "3[0m";
$7 = "3[36m" $7 "3[0m";
$8 = "3[31m" $8 "3[0m";
print
}
'
}
Pode ser necessário reiniciar sua bash
session (ou executar source ~/.bashrc
) para que esta definição de função seja executada.
A partir daqui, você pode simplesmente chamar lsc
, que deve fornecer a saída desejada: