Sed

Résolu
guillaume0811 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -  
guillaume0811 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute en sed et je cherche à modifier la totalité d'une ligne commencant par > :

>XXXXXXXX
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>YYYYYYYYY
bbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbb
>ZZZZZZZZZ
ccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccc

pour donner :

>XXXXXXX
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
tttttttttttttttt
bbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbb
tttttttttttttttt
cccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccc

Je bloque pour modifier la ligne en entier...

2 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Bonjour,

S'il vous plaît
Merci
Au revoir
etc.
Sont monnaie courante quand on veut obtenir quelque chose !

Saine lecture...*
A voir aussi

Merci de votre compréhension.

De plus j'ai rien compris à ton histoire ;-((

Modifier une ligne qui commence par ">" par quoi ? Des "ttt" ? Combien ?
Pourquoi la 1ère ligne n'est pas prise en compte ?

;-)

* Bonus
0
guillaume0811 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   3
 
Bonjour,

Excusez moi, je vais recommencer ;-)

Voila un exemple de fichier que je dispose :

>sp|Q197F8|002R_IIV3
MASNTVSAQGGSNRPVRDFSNIQDVAQFLLFDPIWNEQPGSIVPWKMNREQALAE
>sp|Q197F7|003L_IIV3
MYQAINPCPQSWYGSPQLEREIVCKMSGAPHYPNYYPVHPNALGGAWFDTSLNARS
>sp|Q197F5|005L_IIV3
MRYTVLIALQGALLLLLLIDDGQGQSPYPYPGMPCNSSRQCGLGTCVHSRCAHCSS


Je souhaiterais modifier les lignes commencants par un ">" par une autre chaine de caractère, on va dire "MCMCMC" à l'exeption de la première ligne.

donc ca donnerait:

>sp|Q197F8|002R_IIV3
MASNTVSAQGGSNRPVRDFSNIQDVAQFLLFDPIWNEQPGSIVPWKMNREQALAE
MCMCMC
MYQAINPCPQSWYGSPQLEREIVCKMSGAPHYPNYYPVHPNALGGAWFDTSLNARS
MCMCMC
MRYTVLIALQGALLLLLLIDDGQGQSPYPYPGMPCNSSRQCGLGTCVHSRCAHCSS


J'ai tenté ceci : sed -e '2,$ s/^>/MCMCMC/g'
mais ceci ne modifie pas la ligne en entier, seulement le ">"

J'espère m'être mieux fait comprendre.

Merci
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
sed -e '2,$ s/^>.*/MCMCMC/'

;-))
0
guillaume0811 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   3
 
Haaa merci beaucoup, ça fait quelques temps que je cherchais cette formule magique :D
Le " .* " signifie quoi exactement ? simplement jusqu'au bout de la ligne?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Oui. En fait il englobe tout ce qui suit.
0
guillaume0811 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   3
 
Merci beaucoup
Encore désolé pour tantôt
a+ ;-)
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

.* - c'est une très grand histoire qui peu provoquer beaucoup des choses bonnes et/ou mauvaise

. (le point) - c'est une classe de caractère qui peut reconnaître n'importe quel caractère
* (l'étoile) - c'est un quantification qui s'applique au métacaractère précèdent avec la possibilité de reconnaître zéro fois, une fois où n'importe combien des fois le moteur de regex peuvent.
En général sans autre traitement cet motif .* est gourmand et il avale tout jusqu'à la fin de la chaîne.
On peut le stopper d'avaler tout, en l'ancrant au début, à la fin ou au début et à la fin

Sed n'est qu'un outil qui utilise les regex à sa façon. Toutefois si le domaine des regex t'intéresse, en plus de sed qui reste un outil, très puissant mais un outil, tu dois te pencher plutôt sur le petit mini langage des regex.
Ca te permettra de les utiliser avec n'importe quel outil.
Depuis quand j'ai lui le livre https://docstore.mik.ua/orelly/perl4/mre/index.htm à chaque utilisation de PC j'ai tapé au moins une regex.
0