Posez votre question Signaler

Sed substitute [Résolu]

tht123 72Messages postés 8 mai 2007Date d'inscription - Dernière réponse le 21 juin 2007 à 08:58
Hello,
Je remplace tous les espaces composés de min. 5 espaces par ";" : avec la commande sed :
sed "s/ \{,5\}/;/g" fich1.txt>fich2.txt
Mais je dois introduire une restriction supplémentaire : Càd la même action qu'ici avant mais en ignorant les 50 premiers caractères??
Je sais que l'on peut dire à sed d'adresser les occurences mais ici ce n'est pas a partir de la 2 ou 3ème occurence mais à partir du 50ème caractère...
D'avance merci.
Lire la suite 

Sed substitute »

Suggestions
10 réponses
Réponse
+0
moins plus
Salut,

Bon perso déjà l'expression primaire ressemblerait plutôt à ça :
sed -r 's/[ ]{5,}/;/g'
Mais bon si ça marche chez toi...

Ensuite histoire qu'on s'entende bien, peux-tu s'il te plaît poster un bout de ton fichier d'entrée ainsi qu'un aperçu du résultat escompté, merci.

;-))
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour jipicy et les autres!!!

1) J'ai esayé ton code et là où le mien fonctionne le tiens semble remplaccer chaque espace par un ";" et donc quand j'ai 5 espaces j'ai : ;;;;; .

2) Voilà un exemple que souhaite réaliser :

Avant traitement :

Ref0044 arezdvfhjfugyuo zz dat1 1236 dat2 8886 dat3 9999
Ref0114 arezdvfjgdfkhgk mm dat1 1236 dat2 8886 dat3 9999
Ref0124 arrrrrruioyhyugi er dat1 1236 dat2 8886 dat3 9999

Après traitement :

Ref0044 arezdvfhjfugyuo zz dat1;1236;dat2;8886;dat3;9999
Ref0114 arezdvfjgdfkhgk mm dat1;1236;dat2;8886;dat3;9999
Ref0124 arrrrrruioyhyugi er dat1;1236;dat2;8886;dat3;9999

Voilà donc un exmple, j'espère avoi été plus clair

Merci.
jipicy - 20 juin 2007 à 09:34
Voilà donc un exmple, j'espère avoi été plus clair
Dans les explications oui mais pas dans les exemples !!! On voit pas les espaces ;-(
Voilà à quoi ressemble ton fichier, tous les espaces sont identiques
Ref0044 arezdvfhjfugyuo zz dat1 1236 dat2 8886 dat3 9999
Ref0114 arezdvfjgdfkhgk mm dat1 1236 dat2 8886 dat3 9999
Ref0124 arrrrrruioyhyugi er dat1 1236 dat2 8886 dat3 9999
Alors que si il existe des tabulations ou plus d'un espace, on verra :
Ref0044 arezdvfhjfugyuo zz dat1     1236     dat2     8886     dat3     9999
Ref0114 arezdvfjgdfkhgk mm dat1     1236     dat2     8886     dat3     9999
Ref0124 arrrrrruioyhyugi er dat1     1236     dat2     8886     dat3     9999
Colles tes exemples entre les balises "code" (le bouton Code) s'il te plaît. ou alors poste sur Cjoint.

Merci ;-))
Ajouter un commentaire
Réponse
+0
moins plus
<code>
Avant traitement :

Ref0044 arezdvfhjfugyuo zz dat1 1236 dat2 8886 dat3 9999
Ref0114 arezdvfjgdfkhgk ee dat1 1236 dat2 8886 dat3 9999
Ref0124 arrrrrruioyhyugi er dat1 1236 dat2 8886 dat3 9999

Après traitement :

Ref0044 arezdvfhjfugyuo zz dat1;1236;dat2;8886;dat3 9999
Ref0114 arezdvfjgdfkhgk aa dat1;1236;dat2;8886;dat3 9999
Ref0124 arrrrrruioyhyugi er dat1;1236;dat2;8886;dat3 9999

Efait, je ne remplace que les espaces à partir du 60ème caratère!

BAT
Ajouter un commentaire
Réponse
+0
moins plus
Avant traitement : 

Ref0044      arezdvfhjfugyuo      zz            dat1 1236 dat2 8886 dat3 9999 
Ref0114      arezdvfjgdfkhgk      mm         dat1 1236 dat2 8886 dat3 9999 
Ref0124      arrrrrruioyhyugi      er             dat1 1236 dat2 8886 dat3 9999 
  
Après traitement : 

Ref0044      arezdvfhjfugyuo      zz            dat1;1236;dat2;8886;dat3 9999 
Ref0114      arezdvfjgdfkhgk      mm         dat1;1236;dat2;8886;dat3 9999 
Ref0124      arrrrrruioyhyugi       er            dat1;1236;dat2;8886;dat3 9999 

Ajouter un commentaire
Réponse
+0
moins plus
oups oups$


http://cjoint.com/?gukOdcvY5u
Ajouter un commentaire
Réponse
+0
moins plus
[jp@MDK tmpfs]$ cat exemple.txt

Ref0044      arezdvfhjfugyuo      zz             dat1      1236      dat2      8886      dat3      9999
Ref0044      arezdvfhjfugyuo      zz             dat1      1236      dat2      8886      dat3      9999
Ref0044      arezdvfhjfugyuo      zz             dat1      1236      dat2      8886      dat3      9999

[jp@MDK tmpfs]$ sed -e :loop -e 's/^\(.\{53,\}\)[ ]/\1;/;tloop' -e 's/;\+/;/g' exemple.txt

Ref0044      arezdvfhjfugyuo      zz             dat1;1236;dat2;8886;dat3;9999
Ref0044      arezdvfhjfugyuo      zz             dat1;1236;dat2;8886;dat3;9999
Ref0044      arezdvfhjfugyuo      zz             dat1;1236;dat2;8886;dat3;9999

[jp@MDK tmpfs]$ 
;-))
Ajouter un commentaire
Réponse
+0
moins plus
Merci jipicy,

Pourrais tu m'expliquer ce code stp?? Afin que je puisse comprendre et evoluer un peu plus!

(Je pourrais ainsi la modifier pour qu'elle remplace par ; quà partir du moment où j'ai min 3 espaces.., car ici elle remplace tous les espaces..)

sed -e :loop -e 's/^\(.\{53,\}\)[ ]/\1;/;tloop' -e 's/;\+/;/g' exemple.txt

1) LE -e indique à sed d'exécuter les commandes en PIPE;
2) :loop est un LABEL sur lequel on boucle grace à tloop
3) Sed "MATCHES" tous les caractères depuis le début de ligne jusqu'au 53ème

4) \1; ===> ????????????????????????????????????

5) ;\+ ===> ????????????????????????????????????

BAT, merci
jipicy - 21 juin 2007 à 08:49
Re-

4) \1 ===> Fait référence à la 1ère sous-expression.
Une sous-expression est une partie d'expression régulière que l'on souhaite réutiliser dans la chaîne de remplacement, elle est délimitée par des parenthèses protégées (ou pas si on utilise le switch "-r").
Ainsi "\1" fait référence à la 1ère, "\2" à la seconde, etc...

5) ;\+ ===> Une ou plusieurs occurrence(s) du caractère précédent. Équivalent de "\{1,\}"
Ajouter un commentaire
Réponse
+0
moins plus
MERCI+++

BONNE JOURNEE
Ajouter un commentaire
Ce document intitulé « Sed substitute » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook