Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/12/2014, à 14:49

L'Africain

(Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

Bonjour,
C'est encore moi... mais je m'en sort décidément pas tout seul avec sed...
Voilà j'ai ça:
$$$mot (ou chiffre espace mot) espace chiffre,chiffre
exemples:

$$$Genesis 1,12
ou
$$$1 Corinthian 1,23
Je voudrais obtenir :
$$$1Corinthians1.23

Je fais ça :

 sed -e 's/\$$$+[ ][0-9],/\$$$+[0-9]:/g'  Test.txt >sortie.txt

Dans mon fichier j'optiens:

$$$+[0-9].

A la place de :
$$$Genesis...

Merci encore!

Dernière modification par L'Africain (Le 11/12/2014, à 09:44)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#2 Le 07/12/2014, à 15:44

nesthib

Re : (Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

Tu ne devrais pas mettre d'expression rationnelle dans la partie droite de l'opérateur de substitution de sed.
Si, comme je le suppose, tu cherches à supprimer les espace et remplacer les virgules par des points, tu peux faire :

sed 's/ //g;s/,/./g' fichier > sortie

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 07/12/2014, à 20:35

L'Africain

Re : (Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

Salut,
En fait je ne cherche pas à remplacer tous les espaces et les virgules, mais seulement à supprimer l'espace sur les lignes qui commence par:

$$$nom 1...

Et la virgule entre le 1 (ou un autre chiffre) et un autre chiffre:

... 2,34\n

J'ai fait ça:

sed -r 's/^(\$\$\$[^ ]+)/\1/' entree.txt >sortie.txt

Ça marche pas... Pour les dollars je m'était trompé, c'est pas des expressions rationnelles, mais la lignes commence par 3 dollars...
En gros toutes les lignes qui commencent par 3 $ suivit d'un ou deux mots suivi d'un espace d'un chiffre suivi d'une virgule, je souhaite supprimer l'espace et remplacer la virgule par des :
Bonne soirée!


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#4 Le 10/12/2014, à 01:02

Ierid

Re : (Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

Bonjour,

Pour effacer tous les espaces sur les lignes commençant par $$$, voici ce que tu peux faire :

sed -r '/^\$\$\$/s/[ ]//g' entree.txt > sortie.txt

Pour changer les , en : sur ces même lignes :

sed -r '/^\$\$\$/s/,)/:/' entree.txt > sortie.txt

Pour tout faire, il suffit d'assembler :

sed -r '/^\$\$\$/s/[ ]//g; /^\$\$\$/s/,)/:/' entree.txt > sortie.txt

Bonne soirée.

Hors ligne

#5 Le 10/12/2014, à 22:11

L'Africain

Re : (Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

Merci, demain je teste ça. Mais je comprends déjà beaucoup mieux 'écriture des occurrences!

Edit : ok ça marche à part la commande pour substituer la "," par un " :" il fallait enlever la parenthèse qui se trouvait dans la ligne.
Donc si je comprends bien:
j'écris d'abord à quoi ressemble la ligne: ^\$\$\$, c'est comme dire : tout ce qui commence par ça tu vas faire ce qui suit: /s/ c'est à dire substituer :
[ ] (un espace) par un // (rien).
Même principe pour les double point, juste une question, pourquoi il y a un g à la fin de la première substitution et pa après la deuxième?
EN tout cas un grand merci, c'est résolu!

Dernière modification par L'Africain (Le 11/12/2014, à 09:43)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#6 Le 11/12/2014, à 14:54

Ierid

Re : (Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

Salut,

J'ai effectivement fait une erreur de copier/coller pour la suppression de la , :-o

Pour être précis, une commande de remplacement avec sed est de la forme suivante : adresse_deb,adresse_fins/motif/remplacement/ .
Les adresses décrivent les ligne où l'on appliquera le changement.

Cela peut être des numéros de ligne :
- changement entre les lignes 12 et 15 : 12,15s/toto/tata/
- changement sur la ligne 12 : 12s/toto/tata/

Cela peut aussi être des expression régulière :
- changement entre la ligne contenant abc et la ligne contenant def : /abc/,/def/s/toto/tata/
- changement de la ligne contenant tabc : /abc/s/toto/tata/

L'option g après s signifie que l'on change toutes les motifs qui sont sur la ligne. S'il n'est pas mis, seul le premier motif sera modifié.

J'espère que cela t'aidera encore.

A+

Hors ligne

#7 Le 11/12/2014, à 21:02

L'Africain

Re : (Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

Merci pour ces explications!
j'ai encore une question (j'en profite): si on veut par exemple enlever pas le premier motif mais le 4ème comment on fait? puisque avec g c'est tout les motifs, et sans g c'est le premier.
A+


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#8 Le 12/12/2014, à 09:40

credenhill

Re : (Résolu) Supprimer espace entre mot et chiffre puis virgule par ":"

hello
remplacer g par 4

$ echo "abcdef" | sed 's/./X/4'
abcXef

Hors ligne