ksh / bash Форматирование файлов через sed по файлу cat | команда sed

Я новичок в платформе unix, (обсуждаются альтернативные подходы) Я пытаюсь изменить цвета содержимого файла условно. Мой файл:

ABCD Value Value Value Value Value Value Value Value Value Value Value Value Value Value Value Value 

Моя команда – cat file4 | sed "s,.*,${esc}[33m&${esc}[0m," cat file4 | sed "s,.*,${esc}[33m&${esc}[0m," , логикой которой я понимаю:

  1. Cat файл затем командой sed отредактируйте цвет содержимого с помощью цветовых кодов ANSI.

Но когда я запускаю этот файл, сгенерированный не так, как нужно:

 [33mA BCD[0m [33mValue Value Value Value [0m [33mValue Value Value Value [0m [33mValue Value Value Value [0m [33mValue Value Value Value [0m 

Желаемый результат:

  • Поле A должно быть красным.
  • Поле C должно быть синим.
  • Поле D должно быть желтым.
  • Поле B должно быть зеленым.

Во-первых, это UUOC ( бесполезное использование кошки ). Здесь нет хорошего сменщика, поэтому sed отлично умеет читать файлы, и даже если это не так, то перенаправление стандартного ввода из файла будет эквивалентно его проводу.

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

Это предполагает наличие двух пробелов между полями, которые вы изначально указали, хотя это, похоже, было в редактировании; соответственно.

Я понятия не имею, почему вы думали, что ваш оригинальный способ (совпадение со всем текстом на линии, оберните его между двумя escape-кодами (для желтого), даст вам несколько цветов.