O título diz tudo: eu gostaria de obter aquelas colunas coloridas da saída de algo como ls -al
, digamos, como na resposta de 10basetom a esta pergunta .
8
O título diz tudo: eu gostaria de obter aquelas colunas coloridas da saída de algo como ls -al
, digamos, como na resposta de 10basetom a esta pergunta .
sed
ouawk
e inserir uma sequência de escape ANSI .Respostas:
Isso é possível com
awk
. Infelizmente, como o formato dels -l
não é especificado, não é possível encontrar uma solução que funcione em todos os sistemas; portanto, alguns ajustes de qual cor usar para qual coluna serão necessários em alguns sistemas.Primeiro, queremos preservar os espaços originais usados por
ls -l
. Caso contrário, o alinhamento da coluna estará incorreto. Podemos fazer isso com aFPAT
opção, graças a esta resposta do SO :Em
awk
, cada parâmetro posicional ($1
,$2
etc.) refere-se a um campo, ou seja, uma coluna na linha atual. O que aFPAT
opção acima fez foi redefinir cada campo para incluir todos os espaços anteriores, portanto, quando vocêprint
volta, mantém os espaços para que as colunas permaneçam na mesma posição.Agora podemos simplesmente editar cada campo para inserir o código de cores e imprimir a saída editada:
Observe que cada coluna é redefinida para o padrão (o
0
entre[
em
) posteriormente. Se você deseja que a cor seja executada em várias colunas, você pode omitir esse código. Pessoalmente, prefiro especificar cada coluna independentemente.Você pode definir um comando reutilizável no seu
.bashrc
. Por exemplo:Pode ser necessário reiniciar sua
bash
sessão (ou executarsource ~/.bashrc
) para que esta definição de função seja executada.A partir daqui, você pode simplesmente ligar
lsc
, o que deve fornecer a saída que você deseja:fonte
--color=always
. Contanto que você não aplique cores diferentes à coluna nome do arquivo ($9
no meu exemplo),awk
deve passar por elas.--color=always
é uma extensão GNU, portanto, se você estiver em um sistema não-GNU (por exemplo, macOS, outros BSDs), será necessário instalar a versão GNU ou usar uma alternativa .Isso imprimirá a segunda coluna
ls -alF
em vermelho, a terceira a oitava em azul e a nona em preto:Isso é apenas um exemplo. Você pode personalizar isso para o conteúdo do seu coração.
Para aqueles que preferem seu código espalhado por várias linhas:
Detalhes
tput
é um utilitário para gerar uma grande variedade de códigos de controle para o seu terminal. Por exemplo,tput setaf n
define a cor do primeiro plano paran
onden
pode variar de 0 a 7Você pode ler mais sobre
tput
e seus recursos de cores aqui .O código awk define variáveis
black
,red
eblue
que contêm os códigos de terminal para preto, vermelho e azul, respectivamente. Esses códigos são colocados no início de qualquer coluna que queremos colorir.Um truque é que os códigos de cores não são redefinidos por conta própria. Portanto, qualquer que seja a última cor especificada em uma linha, a menos que outro comando de cor seja especificado, será a cor padrão para a próxima linha.
fonte
awk
! Eu sugiro que você incluir o padrão para preservar o alinhamento da coluna também :)FPAT
truque para manter o espaçamento correto.