La pregunta de OP tenía demasiadas respuestas posibles para ser interesante. Comenzar con echo -e $(cat test.txt).
Thomas Dickey
Respuestas:
10
Estaba buscando una solución a esta pregunta exacta de bash. Casi me pierdo el comentario de @Thomas Dickey que me proporcionó la solución más elegante.
echo -e $(cat test.txt)
Algunas cosas que no funcionaron para mí son (aparentemente no puedes canalizar las cosas para hacer eco)
cat test.txt | echo -e
o
less -R test.txt
Otro problema que tuve fue que echo -e no imprimió nuevas líneas y espacios en blanco contiguos dentro del archivo muy bien. Para imprimirlos, usé lo siguiente.
echo -ne $(cat test.txt | sed 's/$/\\n/'| sed 's/ /\\a /g')
Esto funciona para un archivo test.txt que contiene
Buena respuesta, pero \asuena el timbre para mí. Cambié tu segundo comando sed al sed 's/ /\\033\\a /g'que no suena la campana.
halcón el
1
Después de realizar más pruebas y encontrar más inconsistencias en diferentes programas de terminal (iTerm, Atom / nuclide), he encontrado que es mejor $(cat file.txt)incluir comillas dobles y agregar una nueva línea al final, sin necesidad de sed, así que: echo -ne "$(<file.txt)" \\no echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Eso también evita que bash realice una expansión global en el texto.
halcón el
1
Si no está viendo el color de catlos caracteres de control, probablemente no estén intactos.
Algunas herramientas eliminan los caracteres de control pero se dejan en la cola.
Comparar:
echo -e "\e[0;31mExample\e[0m foo"
a
echo -e "[0;31mExample[0m foo"
Es posible que pueda reconstruir la secuencia de control a partir de lo que queda, aunque no es infalible, ya que la expresión regular que usa puede atraer accidentalmente secuencias de caracteres no deseadas, etc. Pero, por ejemplo:
echo -e "[0;31mExample[0m foo"| sed "s:\[\([0-9]*[;m]\):^[[\1:g"
Debería funcionar por defecto. Por ejemplo, si lo hago ls --color=always > /tmp/ay luego cat /tmp/a, veo los colores. La comprobación con odconfirma que el archivo utiliza colores ANSI.
Así que creo que debería verificar si su terminal admite colores ANSI (y están habilitados).
less -R
, por ejemplo.cat
imprime?echo -e $(cat test.txt)
.Respuestas:
Estaba buscando una solución a esta pregunta exacta de bash. Casi me pierdo el comentario de @Thomas Dickey que me proporcionó la solución más elegante.
Algunas cosas que no funcionaron para mí son (aparentemente no puedes canalizar las cosas para hacer eco)
o
Otro problema que tuve fue que echo -e no imprimió nuevas líneas y espacios en blanco contiguos dentro del archivo muy bien. Para imprimirlos, usé lo siguiente.
Esto funciona para un archivo test.txt que contiene
fuente
\a
suena el timbre para mí. Cambié tu segundo comando sed alsed 's/ /\\033\\a /g'
que no suena la campana.$(cat file.txt)
incluir comillas dobles y agregar una nueva línea al final, sin necesidad de sed, así que:echo -ne "$(<file.txt)" \\n
oecho -ne "$(cat <<"EOF" . . . EOF)" \\n
. Eso también evita que bash realice una expansión global en el texto.Si no está viendo el color de
cat
los caracteres de control, probablemente no estén intactos.Algunas herramientas eliminan los caracteres de control pero se dejan en la cola.
Comparar:
a
Es posible que pueda reconstruir la secuencia de control a partir de lo que queda, aunque no es infalible, ya que la expresión regular que usa puede atraer accidentalmente secuencias de caracteres no deseadas, etc. Pero, por ejemplo:
restauraría el color a la cadena de ejemplo.
fuente
Debería funcionar por defecto. Por ejemplo, si lo hago
ls --color=always > /tmp/a
y luegocat /tmp/a
, veo los colores. La comprobación conod
confirma que el archivo utiliza colores ANSI.Así que creo que debería verificar si su terminal admite colores ANSI (y están habilitados).
fuente