#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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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