Flux rss
Rechercher : dans
Par :

Vi et cygwin

CYG, le mercredi 27 février 2008 à 16:35:42 
 Signaler ce message aux modérateurs

Bonjour,
je veux remplacer 2 chaines de caractéres(NUMMASTER et NUMSLAVE) par 2 autres dans une trentaines de fichiers "doris1.in" dans des sous répertoires différents, pour cela j ai écrit un script test.sh qui contient les commandes suivantes:
cd 19920505_19950901
vi doris1.in
:%s/NUMMASTER/19920505
:%s/NUMSLAVE/19950901
:wq
cd ../19920505_19971015
vi doris1.in
:%s/NUMMASTER/19920505
:%s/NUMSLAVE/19971015
:wq
.
.
.
. idem pour les trentaines de fichier

quand j excute mon script (./test.sh) cygwin m affiche les erreurs suivantes:
./test.sh line3:%s/NUMMASTER/19920505: No such file or directory
./test.sh line4:%s/NUMSLAVE/1995090: No such file or directory
./test.sh line5:wq : command not found
.
.
.
. idem pour les autres lignes
quelqu un peut m aider, ça me déprime ce probléme, 6h sans résultat, j ai cherché partt mais pas trouvé qrand chose

merci d avance

Configuration: Windows 2003
Firefox 2.0.0.9

1

jipicy, le mercredi 27 février 2008 à 19:04:25

Salut,

Tu tiens vraiment à faire ça avec "vi" ?
Parce qu'il y a des solutions bien plus aisées, notamment avec "ed" ou "sed"...

;-))
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

CYG, le jeudi 28 février 2008 à 09:18:14

Salut,
merci pour votre réponse;
mon obejectifs c est de remplacer les chaînes de caractére par d autres chaînes, dans plusieurs fichiers appartenant à différents sous répértoires, quelque soit le moyen (vi, emacs, ed, sed), donc si vous connaissez une commande sur sed ou ed qui me facilite la tâche, je vous serais reconnaissant de m aider

CYG

Répondre à CYG

3

jipicy, le jeudi 28 février 2008 à 09:30:35

Re-

Essaie ça dans un 1er temps :

find . -type f -name "doris1.in" -exec sed 's/NUMMASTER/19920505/;s/NUMSLAVE/19971015/' {} \;
Si la sortie sur l'écran est satisfaisante, rajoute le switch "-i" à sed (sed -i 's/.../.../') pour une modification définitive. Bien évidemment ta version de "sed" doit être supérieure à 4.0.5 pour que le switch "-i" soit implémenté.

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

CYG, le jeudi 28 février 2008 à 09:53:28

Merci;
j ai essayé cette commande, mais cygwin me lance une erreur
find : missing argument to '-exec'
ça veut dire quoi ce message???
vous savez comment le résoudre??
GYG

Répondre à CYG

5

jipicy, le jeudi 28 février 2008 à 09:57:17

Sed est installé au moins ?

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

6

CYG, le jeudi 28 février 2008 à 10:45:29

Oui, puisque j ai déja sed.exe, et quand je met la commande man sed, cygwin me donne plein d infos sur sed
dsl mais je suis encore débutant
CYG

Répondre à CYG

7

jipicy, le jeudi 28 février 2008 à 10:54:22

T'as bien tapé la commande comme donnée ci-dessus, sur une seule ligne, et sans oublié le "\;" à la fin ???

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

8

CYG, le jeudi 28 février 2008 à 11:43:41

Merci bcp;
ça marche bien pour un fichier; mnt je veux bien écrire un script qui contient une trentaine de ligne et chaque ligne présente cette commande (find . -type f -name "doris1.in" -exec sed 's/NUMMASTER/19920505/;s/NUMSLAVE/19971015/' {} \;)
ce qui va changer ce sont les dates pour NUMMASTER et NUMSLAVE, et les sous répertoires
j ai une idée, mais ça marche pas, puisque dans la commande ya (") et (');
gawk '{print "cd ../" $0 "\n" "find . -type f -name" "doris1.in" "-exec sed 's/NUMMASTER/"substr($0,0,8)"/"";s/NUMSLAVE/"substr($0,10,0)"/""' {} \;"}' liste_orb_Couples.txt > test
le fichier iste_orb_Couples.txt contient les noms des sous répertoires par exemples (19920505_19971015\n19930714_19980410)
vous pouvez m aider???
CYG

Répondre à CYG

9

jipicy, le jeudi 28 février 2008 à 12:12:48

Qu'on se comprenne bien, il faut affecter à chaque variable NUMMASTER et NUMSLAVE respectivement la valeur de part et d'autre de l'underscore de chaque sous-répertoire ?

sous_rép=19920505_19971015
NUMMASTER=19920505
NUMSLAVE=19971015

c'est bien ça ?

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

10

CYG, le jeudi 28 février 2008 à 16:21:38

Oui, c est ça
par exemple
dans le sous répertoire :19920505_19971015; j ai un certain fichier doris1.in, ce dernier contient les chaînes de caractéres NUMMASTER et NUMSLAVE que je veux les remplacer par 19920505 et 19971015 respectivement,
et je veux appliqué ça pour une trentaine de fichier doris1.in qui appartient à des sous répertoires différents
19930504_19960718, ......ainsi de suite
CYG

Répondre à CYG

11

jipicy, le jeudi 28 février 2008 à 16:25:19

Alors essaie ça :

find . -type f -name "doris1.in" -exec sed '
s#NUMMASTER#basename $(dirname {})|cut -d_ -f1#e
s#NUMSLAVE#basename $(dirname {})|cut -d_ -f2#e
' {} \; 
À taper sur une seule ligne, sinon si tu dois le mettre dans un script :
find . -type f -name "doris1.in" -exec sed '\
s#NUMMASTER#basename $(dirname {})|cut -d_ -f1#e\
s#NUMSLAVE#basename $(dirname {})|cut -d_ -f2#e\
' {} \; 
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

12

CYG, le jeudi 28 février 2008 à 17:34:16

J ai essayé cette commande, je l ai tapé dans une seule ligne et cygwin me lance
sed: -e expression #1, char 77: unknown option to 's'
sed: -e expression #1, char 77: unknown option to 's'
sed: -e expression #1, char 77: unknown option to 's'
CYG

Répondre à CYG

13

jipicy, le jeudi 28 février 2008 à 17:35:47

Quelle version de sed ?

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

14

jipicy, le jeudi 28 février 2008 à 17:38:34

Oups ;-((

Sur une seule ligne ça doit ressembler à ça (il faut un point virgule entre les 2 expressions de "sed") :

find . -type f -name "doris1.in" -exec sed 's#NUMMASTER#basename $(dirname {})|cut -d_ -f1#e ; s#NUMSLAVE#basename $(dirname {})|cut -d_ -f2#e' {} \; 
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

15

CYG, le jeudi 28 février 2008 à 18:00:44

Ben il me donne plein de message, et pour savoir ce qui se passe j ai ajout -i aprés sed pour appliquée la commande sur les fichiers doris, le résultat, il a effacer ttes les lignes qui contiennent NUMMASTER ou NUMSLAVE
waw
;.))

Répondre à CYG

16

jipicy, le jeudi 28 février 2008 à 18:07:06

ben il me donne plein de message,
Ben lesquels ???


et pour savoir ce qui se passe j ai ajout -i aprés sed pour appliquée la commande sur les fichiers doris, le résultat, il a effacer ttes les lignes qui contiennent NUMMASTER ou NUMSLAVE
C'est bien pour ça que je n'avais pas mis le switch dans mon expression, d'abord vérifier l'affichage sur la sortie standard avant d'appliquer directement ;-\

Copie/colle la ligne que tu emploies et la sortie occasionnée (coupe un peu si c'est trop long, ou colle le résultat sur cjoint)

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

17

CYG, le jeudi 28 février 2008 à 18:22:56

C'est la commande
find . -type f -name "doris1.in" -exec sed 's#NUMMASTER#basename $(dirname {})|cut -d_ -f1#e ; s#NUMSLAVE#basename $(dirname {})|cut -d_ -f2#e' {} \;

les messages

/bin/sh: c: command not found
/bin/sh: c: command not found
cut: invalid byte or field list
try 'cut --help' fore more information.
/bin/sh:M_IN_NULL: command not found
cut: invalid byte or field list
try 'cut --help' fore more information.
/bin/sh:M_IN_VOL: command not found
cut: invalid byte or field list
try 'cut --help' fore more information.
/bin/sh:M_IN_LEA: command not found
cut: invalid byte or field list
try 'cut --help' fore more information.
/bin/sh:M_IN_LEA: command not found
cut: invalid byte or field list
try 'cut --help' fore more information.
.
.
.
.
.
.
.
.
.
.

Répondre à CYG

18

jipicy, le jeudi 28 février 2008 à 18:33:17

Bon c'est surement le fait d'être sous Cygwin et pas sous un shell en natif sous GNU/Linux ;-((

Voilà ce que ça donne chez moi, bon les noms des répertoires ne sont pas les mêmes (mais ça c'est pas grave c'est le résultat qui compte), ainsi que le délimiteur de la commande "cut, adapté pour l'occasion pour partager le nom du répertoire en 2...

[tmpfs]$ tree     # arborescence
.
`-- rep
    |-- sousrep1
    |   `-- doris1.in
    |-- sousrep2
    |   `-- doris1.in
    |-- sousrep3
    |   `-- doris1.in
    |-- sousrep4
    |   `-- doris1.in
    `-- sousrep5
        `-- doris1.in

6 directories, 6 files

[tmpfs]$ cat rep/sousrep1/doris1.in   # contenu fichier "doris1.in"
bla bla bla
bli bli bli
NUMMASTER
blo blo blo
NUMSLAVE
blu blu blu

[tmpfs]$ find . -type f -name "doris1.in" -exec sed '
s#NUMMASTER#basename $(dirname {})|cut -dr -f1#e
s#NUMSLAVE#basename $(dirname {})|cut -dr -f2#e
' {} \;     # commande

bla bla bla
bli bli bli
sous
blo blo blo
ep5
blu blu blu

bla bla bla
bli bli bli
sous
blo blo blo
ep4
blu blu blu

bla bla bla
bli bli bli
sous
blo blo blo
ep3
blu blu blu

bla bla bla
bli bli bli
sous
blo blo blo
ep2
blu blu blu

bla bla bla
bli bli bli
sous
blo blo blo
ep1
blu blu blu

[tmpfs]$     
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

19

jipicy, le jeudi 28 février 2008 à 18:52:32

Tiens je te colle le même test avec des sous-répertoires conforment aux tiens :

[tmpfs]$ tree
.
`-- rep
    |-- 19920501_19971011
    |   `-- doris1.in
    |-- 19920501_19971012
    |   `-- doris1.in
    |-- 19920501_19971013
    |   `-- doris1.in
    |-- 19920501_19971014
    |   `-- doris1.in
    |-- 19920501_19971015
    |   `-- doris1.in
    |-- 19920502_19971011
    |   `-- doris1.in
    |-- 19920502_19971012
    |   `-- doris1.in
    |-- 19920502_19971013
    |   `-- doris1.in
    |-- 19920502_19971014
    |   `-- doris1.in
    |-- 19920502_19971015
    |   `-- doris1.in
    |-- 19920503_19971011
    |   `-- doris1.in
    |-- 19920503_19971012
    |   `-- doris1.in
    |-- 19920503_19971013
    |   `-- doris1.in
    |-- 19920503_19971014
    |   `-- doris1.in
    |-- 19920503_19971015
    |   `-- doris1.in
    |-- 19920504_19971011
    |   `-- doris1.in
    |-- 19920504_19971012
    |   `-- doris1.in
    |-- 19920504_19971013
    |   `-- doris1.in
    |-- 19920504_19971014
    |   `-- doris1.in
    |-- 19920504_19971015
    |   `-- doris1.in
    |-- 19920505_19971011
    |   `-- doris1.in
    |-- 19920505_19971012
    |   `-- doris1.in
    |-- 19920505_19971013
    |   `-- doris1.in
    |-- 19920505_19971014
    |   `-- doris1.in
    `-- 19920505_19971015
        `-- doris1.in

26 directories, 25 files

[tmpfs]$ find . -type f -name "doris1.in" -exec sed '
s#NUMMASTER#basename $(dirname {})|cut -d_ -f1#e
s#NUMSLAVE#basename $(dirname {})|cut -d_ -f2#e
' {} \;
bla bla bla
bli bli bli
19920505
blo blo blo
19971015
blu blu blu

bla bla bla
bli bli bli
19920505
blo blo blo
19971014
blu blu blu

bla bla bla
bli bli bli
19920505
blo blo blo
19971013
blu blu blu

bla bla bla
bli bli bli
19920505
blo blo blo
19971012
blu blu blu

bla bla bla
bli bli bli
19920505
blo blo blo
19971011
blu blu blu

bla bla bla
bli bli bli
19920504
blo blo blo
19971015
blu blu blu

bla bla bla
bli bli bli
19920504
blo blo blo
19971014
blu blu blu

bla bla bla
bli bli bli
19920504
blo blo blo
19971013
blu blu blu

bla bla bla
bli bli bli
19920504
blo blo blo
19971012
blu blu blu

bla bla bla
bli bli bli
19920504
blo blo blo
19971011
blu blu blu

bla bla bla
bli bli bli
19920503
blo blo blo
19971015
blu blu blu

bla bla bla
bli bli bli
19920503
blo blo blo
19971014
blu blu blu

bla bla bla
bli bli bli
19920503
blo blo blo
19971013
blu blu blu

bla bla bla
bli bli bli
19920503
blo blo blo
19971012
blu blu blu

bla bla bla
bli bli bli
19920503
blo blo blo
19971011
blu blu blu

bla bla bla
bli bli bli
19920502
blo blo blo
19971015
blu blu blu

bla bla bla
bli bli bli
19920502
blo blo blo
19971014
blu blu blu

bla bla bla
bli bli bli
19920502
blo blo blo
19971013
blu blu blu

bla bla bla
bli bli bli
19920502
blo blo blo
19971012
blu blu blu

bla bla bla
bli bli bli
19920502
blo blo blo
19971011
blu blu blu

bla bla bla
bli bli bli
19920501
blo blo blo
19971015
blu blu blu

bla bla bla
bli bli bli
19920501
blo blo blo
19971014
blu blu blu

bla bla bla
bli bli bli
19920501
blo blo blo
19971013
blu blu blu

bla bla bla
bli bli bli
19920501
blo blo blo
19971012
blu blu blu

bla bla bla
bli bli bli
19920501
blo blo blo
19971011
blu blu blu

[tmpfs]$ 

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

20

CYG, le vendredi 29 février 2008 à 15:57:20

Merci bcp
le probléme est résolu
CYG

Répondre à CYG

21

 jipicy, le vendredi 29 février 2008 à 16:18:09

De rien, mais peut-on savoir de quelle façon, s'il te plaît ?

Merci d'avance ;-)

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy
Vi ctrl+a ctrl+c salut, question de newbie je voudrais sélectionner tout le texte dans vi. L'équivalent de ctrl+a et ensuite pouvoir le copier et enfin le coller dans un éditeur graphique genre kate sous kde. J'ai cherché et j'ai rien trouvé... voilà merci www.commentcamarche.net/forum/affich-2087851-vi-ctrl-a-ctrl-c
Linux - L'éditeur Vi Introduction à Vi Vi est un des éditeurs de texte les plus populaires sous les systèmes de type Unix (avec Emacs et pico) malgré son ergonomie très limitée. Sous Linux il existe une version libre de Vi appelée Vim (Vi Improved). Vi (prononcez... www.commentcamarche.net/contents/linux/linvi.php3
Linux - L'éditeur Vi Introduction à Vi Vi est un des éditeurs de texte les plus populaires sous Linux (avec Emacs et pico) malgré son ergonomie très limitée. En effet, Vi (prononcez Vihaille) est un éditeur entièrement en mode texte, ce qui signifie que chacune des... www.commentcamarche.net/contents/tutlinux/linvi.php3
[vi/vim] Rechercher un motAfin de rechercher un mot sous Vi/Vim, il suffit de taper "/" ou "?", suivi du mot à rechercher afin de lancer la recherche respectivement vers le bas ou vers le haut. Une pression sur la touche "n" permet d'aller directement à l'occurence... www.commentcamarche.net/faq/sujet-865-vi-vim-rechercher-un-mot
Raccourcis clavier Vi(m)L'éditeur de texte Vi (VIM - Vi amélioré) - Raccourcis clavier I. Les modes d'exécution II. Le mode commande 1. Le déplacement Les Caractères Le texte Les lignes 2. Recherche 3. Numérotation de lignes 4. Modification, suppression III.... www.commentcamarche.net/faq/sujet-8400-raccourcis-clavier-vi-m
[Cygwin] Désinstaller CygWinCygWin est un environnement d'émulation Linux qui permet d'avoir un shell et de compiler et exécuter les programmes Linux (On dispose ainsi de gcc, apache, bash, etc.). CygWin ne possède pas de déinstalleur intégré, mais ce logiciel étant propre,... www.commentcamarche.net/faq/sujet-2879-cygwin-desinstaller-cygwin
Exécution d'un script shell avec CygWin ? (Résolu)Bonjour à tous J'ai installé CygWin sur mon PC pour exécuter des script Shell. J'ai donc écrit un fichier test.sh; mon problème c'est que pour l'exécuter je doit appeler explicitement le programme "sh.exe": $ sh test.sh Il me semble que, dans mes... www.commentcamarche.net/forum/affich-2538886-execution-d-un-script-shell-avec-cygwin
Service Cygwin sshd ne tourne pas ... (Résolu)Bonjour à tous, je souhaiterai accéder à un windows via un linux, j'ai donc installé cygwin sur le windows. J'ai bien le terminal avec bash mais le service CYGWIN sshd ne tourne pas, il devrait meme se lancer au démarrage d'ailleurs... en gros je... www.commentcamarche.net/forum/affich-2147055-service-cygwin-sshd-ne-tourne-pas
Substitution dans VI (Résolu)Bonjour, J'ai une petite substitution dans vi à faire mais je n'y parviens pas, mon expression régulière ne doit pas l'être... En gros j'ai des lignes du genre : xxx Moi je me... www.commentcamarche.net/forum/affich-3445551-substitution-dans-vi
Télécharger CygWinCygwin est un environnement UNIX pour Windows composé: d'un shell Unix d'une librairie dynamique (DLL) chargée de fournir une couche d'émulation Unix pour le système Windows d'un ensemble de librairies, sources et exécutables adaptés à Cygwin... www.commentcamarche.net/telecharger/telecharger-99-cygwin
Télécharger Tweak VITweak VI Basic est un utilitaire permettant d'optimiser et de personnaliser Windows Vista. Voici un aperçu des fonctionnalités de Tweak VI: Activation de centaines de paramètres cachés de Windows vista Nettoyage de la base de registre ... www.commentcamarche.net/telecharger/telecharger-34055069-tweak-vi