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

- - Dernière réponse :  lea-dpencil - 2 sept. 2019 à 14:07
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 !
Afficher la suite 

1 réponse

Messages postés
36991
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2019
3997
0
Merci
Salut,

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


zipe31
Messages postés
36991
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2019
3997 > 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...
zipe31
Messages postés
36991
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2019
3997 > 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
zipe31
Messages postés
36991
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2019
3997 > zipe31
Messages postés
36991
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2019
-
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 :)
Commenter la réponse de zipe31