Supongo que estás canalizando desde ls y desea conservar los códigos de color del terminal. Puedes decir ls --color=always (en lugar del valor predeterminado de --color=auto ), que conservará los códigos, pero eso no garantizará que la cosa a la que estás conectando sepa cómo entenderlos.
Si usa glark en lugar de grep intentará mostrarse con colores.
Si usa less con -R intentará mostrarse con colores.
Depende del programa que genera la salida en la tubería.
head , tail , etc. no son los que eliminan los colores, es el programa que genera los datos los que generalmente verifican si la salida va a la consola (coloreada), un archivo o tubería (no coloreada)
Encontré otra sesión de preguntas y respuestas de SU que muestra cómo mentir a los programas de canalización para que emitan como si estuvieran enviando resultados a una consola (emulando una consola con unbuffer )