ksh / bash Formatação de arquivos através de sed por arquivo cat | comando sed

2

Eu sou novo na plataforma unix, (abordagens alternativas podem ser discutidas) Eu estou tentando alterar as cores do conteúdo de um arquivo condicionalmente. Meu arquivo é:

A  B  C  D
Value  Value  Value  Value  
Value  Value  Value  Value  
Value  Value  Value  Value  
Value  Value  Value  Value  

Meu comando é cat file4 | sed "s,.*,${esc}[33m&${esc}[0m," , cuja lógica eu entendo ser:

  1. Cat o arquivo, em seguida, pelo comando sed editar a cor do conteúdo, usando os códigos de cores ANSI.

Mas quando eu executo este arquivo gerado não é conforme desejado:

[33mA  B  C  D[0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m

Saída desejada:

  • O campo A deve ser vermelho.
  • O campo C deve estar em azul.
  • O campo D deve ser amarelo.
  • O campo B deve ser verde.
por Aman 17.04.2015 / 13:39

1 resposta

2

Em primeiro lugar, este é um UUOC ( uso inútil de cat ). Não há um bom eason para usar cat , sed é perfeitamente capaz de ler arquivos em si, e mesmo se não fosse, então redirecionar a entrada padrão do arquivo seria equivalente a canalizá-lo.

esc=$(echo -e '\e')
sed "s,\(.*\)  \(.*\)  \(.*\)  \(.*\),$esc[31m  $esc[34m  $esc[33m  $esc[32m$esc[m," file4

Isto está assumindo os dois espaços entre os campos como você especificou originalmente, embora isso pareça ter ocorrido em uma edição; ajuste de acordo.

Não tenho ideia do motivo pelo qual você pensou que a sua maneira original (combinar todo o texto em uma linha, envolvê-lo entre dois códigos de escape (para amarelo) lhe daria várias cores.

    
por 17.04.2015 / 13:59