web-dev-qa-db-fra.com

édition de texte à l'aide de la commande tr

En utilisant la commande:

tr -s '\n' ' '< test1

où test1 est un fichier texte.

Si test1 est écrit d'une manière telle qu'il contient des sauts de ligne (caractères de saut de ligne) et non\n (barre oblique inversée-n), la réponse est comme prévu, c'est-à-dire que tous les sauts de ligne sont remplacés par un seul espace.

Mais si disons que le test1 est formaté de telle sorte qu'il contient\n (barre oblique inversée-n) et non un retour à la ligne, alors l'exécution de la commande\n n'est pas remplacée par un seul espace, par exemple. si test1 contient

hello \n\n\n how are \n\n you

alors la sortie est

hello \n\n\n how are \n\n you

et pas

hello   how are   you
1
codelec

La question est donc de savoir comment remplacer les barres obliques inverses littérales?

Si c'est le cas, cela ne peut pas être fait avec tr, car tr ne fonctionne que sur des caractères uniques. Voici comment le faire dans sed (éditeur de chaînes):

$ cat test1
hello \n\n\n how are \n\n you
$ sed -e 's/\\n/ /g' < test1
hello     how are    you

notez la barre oblique inverse supplémentaire nécessaire pour dire à sed que nous recherchons ici une barre oblique inverse littérale, et pour ne pas interpréter '\ n' comme un caractère de saut de ligne.

2
Kim Phillips