Bonjour,
je souhaite dans un fichier, remplacer un suite d'espace par un seul caractère.
j'ai testé s/ //g, mais chaque espace est remplacé, ce que je ne souhaite pas.
Quel syntaxe utiliser?
Merci
Kondor76
Bonjour,
je souhaite dans un fichier, remplacer un suite d'espace par un seul caractère.
j'ai testé s/ //g, mais chaque espace est remplacé, ce que je ne souhaite pas.
Quel syntaxe utiliser?
Merci
Kondor76
Salut,
Je dirais s/ //
Winnt
Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
Pensez au boutonsi votre problème est résolu.
C'est en Linuxant qu'on devient .... geek
Et c'est en LateXant qu'on devient flemmard
Mon blog tout neuf.
Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.
Bonjour,
Que souhaites-tu faire :
Remplacer toutes les suites de X espaces par le caractere _ : exemple avec 5 espaceExplication :
Code : Sélectionner tout - Visualiser dans une fenêtre à part :%s/\s\{5}/_/g
- :%s : remplacer dans tout le fichier
- / : separateur d'expression
- \s : le caractere espace
- \{5} : exactement 5 occurences de l'expression precedente (ici \s, donc 5 espaces)
- g : plusieurs fois par ligne si besoin
Remplacer tous les champs contenant au moins 2 espaces par le caractere _ :Explication :
Code : Sélectionner tout - Visualiser dans une fenêtre à part :%s/\s\s\+/_/g
- :%s : remplacer dans tout le fichier
- / : separateur d'expression
- \s : le caractere espace
- \s : un second caractere espace
- \+ : au moins une occurence de la derniere expression (donc ici au moins un deuxieme espace, jusqu'a l'infini)
- g : plusieurs fois par ligne si besoin
Tout ceci dans vim bien sur.
J'imagine que c'est pareil avec sed ?
Oui :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $> sed 's/\s\s\+/_/g' mon_fichier_source > mon_fichier_sortie
Salut,
Sans vouloir contredire voici ce que tu mets dans ton post
Et voici ce que je proposaisEnvoyé par kondor76
Il y a une petite différence notée en rouge : s/ //gEnvoyé par winnt
![]()
Winnt
Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
Pensez au boutonsi votre problème est résolu.
C'est en Linuxant qu'on devient .... geek
Et c'est en LateXant qu'on devient flemmard
Mon blog tout neuf.
Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.
Pour enrichir la base de connaissances :
Ceci :
fait encore autre chose : cela supprime uniquement le premier caractere espace de chaque ligne (enfin non, ca le remplace par "rien", et il suffit donc d'inserer le caractere voulu entre les deux /)
Code : Sélectionner tout - Visualiser dans une fenêtre à part :%s/ //
Merci de l'info gangsoleil.
Winnt
Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
Pensez au boutonsi votre problème est résolu.
C'est en Linuxant qu'on devient .... geek
Et c'est en LateXant qu'on devient flemmard
Mon blog tout neuf.
Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.
Une autre façon, qui a l'avantage d'être portable, de remplacer toute suite de plus d'un espace par un caractère, ici "_":
Code : Sélectionner tout - Visualiser dans une fenêtre à part :%s/ */_/g
Ou plus simplement:
(rien avant s, 2 espaces seulement avant l'étoile et un espace en remplacament
Code : Sélectionner tout - Visualiser dans une fenêtre à part sed 's/ */ /g' monFichier
Ce n'est pas equivalent : dans ce cas, tu remplaces toutes les suites d'un ou plusieurs espaces par un seul.
Pour remplacer une suite d'espace par autre chose, tu n'as a priori que deux expressions regulieres correctes (plus des composees de celles-ci) :
- espace espace + --> espace suivi d'au moins un espace
- espace espace espace * --> 2 espaces suivis de 0 ou plusieurs espace(s)
Apres, ce n'est que de la syntaxe de remplacement,![]()
Je suppose que tu veux dire que tu as un script dans une crontab, script qui appelle expect pour aller chercher des informations, et que c'est sur ce resultat que tu veux faire le remplacement ?
Si oui, je te conseille de sauver les donnees dans un premier fichier (ma_source.txt), puis de faire le traitement (avec l'un des exemples d'ici, celui que tu preferes) en ecrivant la sortie dans un autre fichier (ma_sortie.txt).
Super, merci pour toutes ces infos!!
maintenant une autre question:
A l'origine, un script lancé en crontab qui utilise expect pour me remonter des informations formatées d'un équipement; Cet équipement renvoie les informations avec des suites d'espace pour faire "colonne par colonne" (d'où mon post d'origine)
Cette suite d'espace provoque au départ, un dépassement de largeur du "terminal" en cron (qui doit être j'imagine fixé à COLUMNS=80). Du coups la fin de certaines lignes s'affiche sur la ligne
Je pensais qu'en supprimant les espace j'aurais tout bien formaté, ligne par ligne, mais non. L'origine doit être en amont.
Dans mon script j'ai essayé de re-valorise ma variable COLUMNS, mais pas pris en compte.
Comment faire? (si vous avez du mal à comprendre, dites le moi, c'est pas facile à expliquer).
=> Ce que j'ai
vaaaaaaaaaaaaaaaaaal1 champs1 champs2 champs3 champs4
champ5
2 val2 champs1 champs2 champs3 champs4 champs5
3- val3 champs1 champs2 champs3 champs4 champs5
4 val4 champs1 champs2 champs3 champs4 champ5
5- val5 champs1 champs2 champs3 champs4 champ5
.....
8- vaaaaaaaaaal8 champs1 champs2 champs3 champs4
champ5
......
12- vaaaaaaaaaaaaaaaaal5 champs1 champs2 champs3 champs4
champ5
....
20-val20 champs1 champs2 champs3 champs4 champ5
==> ce je que veux:
1 vaaaaaaaaaaaaaaaaaal1 champs1 champs2 champs3 champs4 champ5
2 val2 champs1 champs2 champs3 champs4 champ5
3 -val3 champs1 champs2 champs3 champs4 champ5
4 val4 champs1 champs2 champs3 champs4 champ5
5- val5 champs1 champs2 champs3 champs4 champ5
....
8- vaaaaaaaaaal8 champs1 champs2 champs3 champs4 champ5
........
12- vaaaaaaaaaaaaaaaaal5 champs1 champs2 champs3 champs4 champ5
20 val20 champs1 champs2 champs3 champs4 champ5
Je ne pense pas du tout que le probleme vienne de la crontab, mais bien plus de expect (mouais) ou du mode de transfert utilise (telnet ?).
Apres, la seule idee qui me vienne si tu ne trouves pas la source de ton probleme est un script awk qui compte le nombre de colonnes, et s'il n'y en a que 5 au lieu de 6, fusionne la ligne courrante avec la ligne suivante.
Voici le ligne du expect:
expect -c "spawn ssh -t -l $USER $EQUIPMENT $cmd; expect Enter;send \"$PASSWD\n\";expect eof" | sed 's/\s\s\+/|/g' | grep "^[1-9]" | sed 's/\*/-/g'
Et quel genre le script? ne faut il pas compter colonne et ligne (le fichier de résultat doit en compter 20.
Bonjour,
Ne peux tu faire directement du ssh avec une clé au lieu d'un mot de passe, ce qui permettrai de ne pas utiliser expect ?
Sinon, as tu essayer de lancer le ssh (dans ta commande expect) en mode batch (et donc sans l'option -t) pour l'option batchmode (-o BatchMode=yes)
Autre possibilité, dans ta commande ssh, tu force un pseudo-tty (option -t), as tu essayé de revalorisé le COLUMNS juste avant ta $cmd (donc dans le ssh) ?
Ou bien, toujours dans le ssh, de faire un stty columns 100 (ou un autre nombre) ?
Cordialement.
Juste pour information, c'est bien la continuation du message du 21 février, non?
http://www.developpez.net/forums/d13...nsion-fenetre/
C'est bien toujours le même problème qui n'est pas réglé?
Partager