La question d'OP avait trop de réponses possibles pour être intéressante. Commencez par echo -e $(cat test.txt).
Thomas Dickey
Réponses:
10
Je cherchais une solution à cette question bash exacte. J'ai failli manquer le commentaire de @Thomas Dickey qui m'a fourni la solution la plus élégante.
echo -e $(cat test.txt)
Certaines choses qui n'ont pas fonctionné pour moi sont (apparemment, vous ne pouvez pas faire écho aux choses)
cat test.txt | echo -e
ou
less -R test.txt
Un autre problème que j'avais était que echo -e n'imprimait pas bien les retours à la ligne et les espaces blancs contigus dans le fichier. Pour les imprimer, j'ai utilisé ce qui suit.
echo -ne $(cat test.txt | sed 's/$/\\n/'| sed 's/ /\\a /g')
Cela fonctionne pour un fichier test.txt contenant
Bonne réponse, mais \asonne la cloche pour moi. J'ai changé votre deuxième commande sed sed 's/ /\\033\\a /g'qui ne sonne pas.
faucon
1
Après des tests supplémentaires et la découverte de plus d'incohérences dans différents programmes terminaux (iTerm, Atom / nuclide), j'ai trouvé préférable de simplement mettre $(cat file.txt)des guillemets doubles et d'ajouter une nouvelle ligne à la fin - pas besoin de sed - donc: echo -ne "$(<file.txt)" \\nou echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Cela empêche également bash d'effectuer une expansion globale dans le texte.
faucon
1
Si vous ne voyez pas de couleur, catles caractères de contrôle ne sont probablement pas intacts.
Certains outils suppriment les caractères de contrôle mais laissent en queue de ligne.
Comparer:
echo -e "\e[0;31mExample\e[0m foo"
à
echo -e "[0;31mExample[0m foo"
Vous pourriez être en mesure de reconstruire la séquence de contrôle à partir de ce qui reste, bien que ce ne soit pas à toute épreuve car l'expression régulière que vous utilisez peut accidentellement extraire des séquences de caractères involontaires, etc. Mais par exemple:
echo -e "[0;31mExample[0m foo"| sed "s:\[\([0-9]*[;m]\):^[[\1:g"
Cela devrait fonctionner par défaut. Par exemple, si je le fais ls --color=always > /tmp/aet que cat /tmp/a, je vois les couleurs. La vérification avec odconfirme que le fichier utilise les couleurs ANSI.
Je pense donc que vous devriez vérifier si votre terminal prend en charge les couleurs ANSI (et elles sont activées).
less -R
, par exemple.cat
impression?echo -e $(cat test.txt)
.Réponses:
Je cherchais une solution à cette question bash exacte. J'ai failli manquer le commentaire de @Thomas Dickey qui m'a fourni la solution la plus élégante.
Certaines choses qui n'ont pas fonctionné pour moi sont (apparemment, vous ne pouvez pas faire écho aux choses)
ou
Un autre problème que j'avais était que echo -e n'imprimait pas bien les retours à la ligne et les espaces blancs contigus dans le fichier. Pour les imprimer, j'ai utilisé ce qui suit.
Cela fonctionne pour un fichier test.txt contenant
la source
\a
sonne la cloche pour moi. J'ai changé votre deuxième commande sedsed 's/ /\\033\\a /g'
qui ne sonne pas.$(cat file.txt)
des guillemets doubles et d'ajouter une nouvelle ligne à la fin - pas besoin de sed - donc:echo -ne "$(<file.txt)" \\n
ouecho -ne "$(cat <<"EOF" . . . EOF)" \\n
. Cela empêche également bash d'effectuer une expansion globale dans le texte.Si vous ne voyez pas de couleur,
cat
les caractères de contrôle ne sont probablement pas intacts.Certains outils suppriment les caractères de contrôle mais laissent en queue de ligne.
Comparer:
à
Vous pourriez être en mesure de reconstruire la séquence de contrôle à partir de ce qui reste, bien que ce ne soit pas à toute épreuve car l'expression régulière que vous utilisez peut accidentellement extraire des séquences de caractères involontaires, etc. Mais par exemple:
restaurerait la couleur de la chaîne d'exemple.
la source
Cela devrait fonctionner par défaut. Par exemple, si je le fais
ls --color=always > /tmp/a
et quecat /tmp/a
, je vois les couleurs. La vérification avecod
confirme que le fichier utilise les couleurs ANSI.Je pense donc que vous devriez vérifier si votre terminal prend en charge les couleurs ANSI (et elles sont activées).
la source