Remplacement avec sed

Résolu/Fermé
CYG - 3 mars 2008 à 17:31
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 4 mars 2008 à 14:31
Bonjour,
j ai besoin d exécuter une commande shell qui contient une tabulation, et je sais pas comment faire avec cygwin, la commande est comme suit:
"find sed -i 's/PROCESS M/c PROCESS M/' {} \;"
sachant que entre PROCESS et M y a 2 tabulations

quelqu'un peut m'aider

merci d'avance
CYG

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
3 mars 2008 à 17:47
Salut,

Ta commande déjà elle veut rien dire ;-\

Ensuite tu veux faire quoi avec "sed" ? (dans ton exemple tu veux remplacer "Process M" par "Process M")

Les 2 tabulations elles sont dans la partie gauche ou droite de "sed" ?

PS. Sers-toi des balises "< code >" et "</ code >" (sans les espaces après les chevrons ouvrants et avant les chevrons fermants) pour mettre du texte en forme dans le forum :
$ echo -e "A\t\tB"
A               B
$ echo -e "A\tB"
A       B
;-))
0
je veux remplacer "<PROCESS\t\tM>" par "<c PROCESS\t\tM>" ( la différence c est le "c "), mais maintenant j ai fais une mauvaise manipulation, une fausse manoeuvre, j ai cru que "<[\t]>" représente la tabulation et comme résultat dans mes fichiers j ai ça"<c PROCESS[ ][ ]M>" et moi je veux pas que les accolades s affichent, vous pouvez m aidez s il vous plait.

la commande est"<find . -type f -name "doris1.in" -exec sed -i 's/PROCESS[\t][\t]M/c PROCESS[\t][\t]M/' {} \;>"

en plus de ça elle a appliquée la modification sur tout mes fichier doris1.in qui appartient à d autres sous répertoires; je voulais juste testé la commande sur un fichier, mais elle s est appliquée sur tout les fichiers
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
3 mars 2008 à 18:44
Déjà en règle générale, on teste jamais avec le switch "-i" !!! Tu mets rien et comme ça au moins tu vois le résultat à l'écran, ou alors tu mets "-i.BAK" et ça te crée un fichier de sauvegarde...

Peux-tu mettre un fichier "doris1.in" sur "cjoint" s'il te plaît, histoire qu'on ne fasse pas d'autre boulette et qu'on soit sur de la syntaxe à employer (au cas ou il y aurait des caractères qui t'auraient échapper).
echo -e "PROCESS[\t][\t]M" | sed 's/PROCESS\[\t\]\[\t\]M/c PROCESS\t\tM/'
c PROCESS               M
;-))
0
le fichier doris1.in "https://www.cjoint.com/?dds5I4dprx"
0
pour ta commande ou dois je mettre le nom du fichier??
merci
CYG
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
3 mars 2008 à 19:19
Voilà la première commande à appliquer pour retrouver tes tabulations sans les crochets (enlève le "-n" et le "p" final si le résultat est bon et remplace le par "-i" ou "-i.bak") :
sed -n 's/PROCESS\[\t\]\[\t\]M/PROCESS\t\tM/p' doris1.in
et la seconde pour prendre en compte la ligne oubliée (enfin si toutefois c'est vraiment un oubli, vu qu'il y a des espaces vides avant les 2 tabulations) au dessus de 2 autres (idem pour celle-là pour les "-n" et "p"):
sed -n 's/PROCESS[ ]*\t\tM/ c &/p' doris1.in
;-))
0
bonjour;

merci, ta commande est parfaite
;)
CYG
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
4 mars 2008 à 14:31
De rien ;-))
0