Problème avec sed utilisée sur plusieurs fich

Fermé
jil - 22 mai 2012 à 15:07
 jil - 24 mai 2012 à 10:18
Bonjour,

j'essaye de remplacer une chaine de caractère par une autre dans tous les fichiers texte d'un répertoire donné via sed, mais j'ai ce message d'erreur :

sed: impossible de lire /home/moi/data-limit/Lien vers data/TEST/ *.txt: Aucun fichier ou dossier de ce type


voici la commande incriminée :
sed -i -e 's/S1c \/ R1c/NA/g' '/home/moi/data-limit/Lien vers data/TEST/*.txt'

merci de vos tuyaux...

je précise que ça fonctionne si je fais ça fichier par fichier en précisant le nom du fichier...
Il a pas l'air d'apprécier l'étoile pour traiter tous les fichiers texte du répertoire.

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
22 mai 2012 à 15:20
Salut,

C'est les espaces dans le chemin qui ne lui plaise pas (lui = GNU/Linux) ;-(

Au choix, ou tu protèges les espaces ou tu quotes :
/home/moi/data-limit/Lien\ vers\ data/TEST/ *.txt
/home/moi/data-limit/'Lien vers data'/TEST/ *.txt

Petits conseils :
- Avant de mettre l'option "-i", mieux vaut tester sans avant, ou alors préférer "-i.bak" afin de s'assurer d'une sauvegarde ;-\
- Quand on agit sur plusieurs fichiers à la fois, l'option "-s" peut s'avérer fort utile.
0
Salut et merci pour ta réponse, mais c'est bizarre parce que sans protection des espaces, avec un seul fichier, ça marche très bien.

Je précise peut-être encore juste que j'effectue cette commande via la commande system dans le logiciel Octave, ce qui permet de faire appel aux commandes classiques linux dans ce programme.
Du coup, j'ai une sorte de double contrainte sur les caractères spéciaux...

Et depuis là, et bien j
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
22 mai 2012 à 16:42
Je précise peut-être encore juste que j'effectue cette commande via la commande system dans le logiciel Octave,
C'est sûrement la source du problème ;-((

Peut être essayer de renommer le répertoire ayant des espaces dans un premier temps ?
0
salut, j'ai entre temps résolu le problème avec ceci :

effacerPremiereCase = cstrcat("find", ' "', dossier, '"',' -maxdepth 1 -name "*.txt" -type f -exec ', "sed -i -e 's/S1c \\/ R1c/NA/g' ", '{} \;');
system(effacerPremiereCase);


c'est un peu le boxon, je te l'accorde mais ça semble fonctionner.
0