Sed - Remplacement texte par retour à la ligne ? [Résolu/Fermé]

Signaler
-
 lea-dpencil -
Bonjour,

Voilà mon problème :

J'aimerais savoir comment remplacer une chaîne de caractères par un retour à la ligne.
Ca a l'air simple mais j'ai l'impression d'avoir tout testé, sans succès...

sed "s/tmp/\n/g
sed 's/tmp/"\n"/g'`
sed 's/tmp/\n/g'
sed "s/tmp/\\\n/g"
sed "s/tmp/\\n/g"
...

Le\n n'est jamais interprété dans les commandes ci-dessus. Je ne comprends pas pourquoi. u_u'

Peut-être que sed n'est pas la bonne solution ?

Ceci doit s'exécuter dans un script bash.
Système : AIX Version 6.1

Merci beaucoup !

1 réponse

Messages postés
35625
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
24 septembre 2020
5 462
Salut,

Essaie avec le code en hexadécimal :
sed 's/tmp/\x0A/g' 


Messages postés
35625
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
24 septembre 2020
5 462 > lea-dpencil
Avant d'aller plus loin, est-ce que les solutions données ci-dessus marchent en situation normale (commande seule appliquée sur un fichier) ?

$ cat fich 
J'ai un fichier tmp dans un répertoire tmp et puis c'est tout !

$ sed 's/tmp/\x0A/g' fich
J'ai un fichier
dans un répertoire
et puis c'est tout !

$ sed 's/tmp/\o12/g' fich
J'ai un fichier
dans un répertoire
et puis c'est tout !

$ sed 's/tmp/\d10/g' fich
J'ai un fichier
dans un répertoire
et puis c'est tout !

$ sed 's/tmp/\
/g' fich

J'ai un fichier
dans un répertoire
et puis c'est tout !


Peux-tu sinon, nous montrer tes commandes exécutées ?
Je ne souhaite pas appliquer le sed sur l'intérieur d'un fichier mais bien sur leurs noms.

J'ai une variable :
nomFichier=`find /tmp -type f -mtime +7 -name 'tmp/Mes Fichiers*' -exec ls {} \; | tr -dc a-zA-Z0-9 | sed -e s/"tmp"/"\n"/g`


--> Les noms de mes fichiers comportent des espaces et des caractères spéciaux... Je les ai supprimé avec le tr. Je sais, c'est du bricolage.
Le find me met tous les fichiers les uns à coté des autres. Je voudrais une liste.

Après, je souhaite seulement l'afficher avec un echo. C'est pour le confort de l'utilisateur je dirais...
Messages postés
35625
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
24 septembre 2020
5 462 > lea-dpencil
Le find me met tous les fichiers les uns à coté des autres.
J'en doute que ce soit la commande
find
qui fasse ça ;-
Mais plutôt l'affichage de ta variable
nomFichier
que tu dois essayer d'afficher sans mettre de guillemets autour ;-\

$ find /tmp -maxdepth 1 -type f -exec ls {} \;
/tmp/nwQeRin1Yw
/tmp/.X0-lock
/tmp/qipc_sharedmemory_emlmcpgvnwTLKHXhWxKzHUGvrtcnZIldUO78d4b746e5815789a733ad96c65f17f056eb1e87
/tmp/qipc_sharedmemory_qtsingleapplicatione19ad281ceafdac36675b129b90d7db49a817165e
/tmp/qipc_systemsem_emlmcpgvnwTLKHXhWxKzHUGvrtcnZIldUO78d4b746e5815789a733ad96c65f17f056eb1e87
/tmp/config-err-idgenB
/tmp/qtsingleapplication-45c6-3e8-lockfile

$ var=$(find /tmp -maxdepth 1 -type f -exec ls {} \;)

$ echo "${var}"
/tmp/nwQeRin1Yw
/tmp/.X0-lock
/tmp/qipc_sharedmemory_emlmcpgvnwTLKHXhWxKzHUGvrtcnZIldUO78d4b746e5815789a733ad96c65f17f056eb1e87
/tmp/qipc_sharedmemory_qtsingleapplicatione19ad281ceafdac36675b129b90d7db49a817165e
/tmp/qipc_systemsem_emlmcpgvnwTLKHXhWxKzHUGvrtcnZIldUO78d4b746e5815789a733ad96c65f17f056eb1e87
/tmp/config-err-idgenB
/tmp/qtsingleapplication-45c6-3e8-lockfile

$ echo ${var}
/tmp/nwQeRin1Yw /tmp/.X0-lock /tmp/qipc_sharedmemory_emlmcpgvnwTLKHXhWxKzHUGvrtcnZIldUO78d4b746e5815789a733ad96c65f17f056eb1e87 /tmp/qipc_sharedmemory_qtsingleapplicatione19ad281ceafdac36675b129b90d7db49a817165e /tmp/qipc_systemsem_emlmcpgvnwTLKHXhWxKzHUGvrtcnZIldUO78d4b746e5815789a733ad96c65f17f056eb1e87 /tmp/config-err-idgenB /tmp/qtsingleapplication-45c6-3e8-lockfile
Messages postés
35625
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
24 septembre 2020
5 462 >
Messages postés
35625
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
24 septembre 2020

Ce n'est pas bien visible comme ça, mais la dernière commande ne retourne qu'une seule ligne ;-\

$ echo "${var}" | wc -l
7

$ echo ${var} | wc -l
1
Oui, c'est ça !! Ça me facilite la tâche que ce soit ça !

Merci beaucoup pour ton aide :)