Remplacer le saut de ligne par un caractère

0

Je veux remplacer \ n par un caractère.

echo -n  "s\n" |tr  "\n"  "a"
s\n

Pourquoi ne peut pas obtenir sa comme résultat?

it_is_a_literature
la source

Réponses:

2

De man echo:

-e permettre l'interprétation des échappements antislash

Votre écho peut être un shell intégré (essayez type echo). Si oui, utilisez help echoplutôt que man echo. Mais il devrait en être de même pour l' -eoption.

Sans cette option, la \nchaîne est imprimée littéralement et non comme un saut de ligne. Avis trn'a pas besoin d'option spéciale pour fonctionner comme prévu.

Commande fixe:

echo -ne  "s\n" | tr  "\n"  "a"

Un autre utilisateur, Gordon Davisson, a souligné certaines choses. Ils semblent assez importants pour les inclure dans ma réponse pour référence future. À partir de ce moment, tout le mérite revient à Gordon .

Les différentes versions de echosont très incompatibles en ce qui concerne les échappées et les options. Certains interpréteront des séquences d'échappement sans -e. Certains vont imprimer "-e" dans leur sortie. Certains font… d'autres choses. Pour des choses comme ça, utilisez printfplutôt (comme dans printf "s\n"). Voir les spécifications POSIX pourecho , en particulier la section "utilisation de l'application".

Kamil Maciorowski
la source
1
Les différentes versions de echosont très inconsistantes en ce qui concerne les échappements et les options. Certains interpréteront des séquences d'échappement sans -e. Certains vont imprimer "-e" dans leur sortie. Certains font… d'autres choses. Pour des choses comme ça, utilisez printfplutôt (comme dans printf "s\n"). Voir les spécifications POSIX pourecho , en particulier la section "utilisation de l'application".
Gordon Davisson
@GordonDavisson Merci. J'ai cité votre commentaire dans ma réponse.
Kamil Maciorowski