Во-первых, это UUOC
( бесполезное использование кошки ). Здесь нет хорошей простоты в использовании cat
, sed
прекрасно умеет читать сами файлы, а если бы и не умел, то перенаправление стандартного ввода из файла было бы эквивалентно его конвейерному соединению.
esc=$(echo -e '\e')
sed "s,\(.*\) \(.*\) \(.*\) \(.*\),$esc[31m\1 $esc[34m\2 $esc[33m\3 $esc[32m\4$esc[m," file4
Это предполагает два пробела между полями, как вы изначально указали, хотя это, похоже, ушло в редактирование; отрегулируйте соответствующим образом.
Понятия не имею, почему вы думали, что ваш оригинальный способ (сопоставить весь текст в строке, обернуть его между двумя экранирующими кодами (для желтого) даст вам несколько цветов.