|
|
|
|
Bonjour,
Je suis en train de m'exercer à la commande sed, et un de mes exercices consiste à partir d'un fichier toto de supprimer chaque ligne tous les espaces et tab au début et à la fin de chaque ligne ...
Voila ce que j'ai essayé:
sed '/^.,$/s/[\t ]//' toto
Ca ne fonctionne evidemment pas... Pourquoi ? Je ne sais pas ...
Je remercie tous ceux qui y passeront un peu de temps !
Configuration: Mac PowerPC Firefox 2.0.0.1
Je te remercie, ca me permet de mieux comprendre certaine expression rationnelle de sed !
toto(avant): #au dessus il y a 4 lignes vides: #au dessous il y en a 2: toto(aprés): #au dessus il y a 4 lignes vides #au dessous il y en a 2 ................................................................................................................. Voila la tête de ma commande actuelle: sed '/^\n*$/s/\n//1' toto Une idée ?
|
Répondre à momsse
|
Répondre à momsse
|
Un autre exercice, toujours avec la commande s de sed, on doit substituer la première occurence de toto par bobo (la première dans le fichier et non la première dans chaque ligne:
|
Merci pour la décortication !
echo '/usr/local/bolo' | commande sed et echo '/usr/local/bolo/' | commande sed donne la sortie: bolo J'avoue ne même pas savoir par ou commencer ... |
sed -e '/\/$/ s|||' -e 's|.*/\([a-z]*\)$|\1|'Explications : Déjà comme caractère séparateur on prend le pipe "|" au lieu du slash "/" pour ne pas interférer avec les slashs de la chaîne fournie en entrée (libre à toi d'en choisir un autre). switch -e = permet d'enchaîner les commandes 1ère expression : '/\/$/ s|||' /\/$/ : Adressage. Si la chaîne se termine par un "slash" (/) s|||' : On l'efface 2ème expression : 's|.*/\([a-z]*\)$|\1|' .*/ : Tous caractères jusqu'à un slash \(...\) : Permet d'isoler une sous-expression et d'y faire référence \([a-z]*\)$ : Toutes chaînes alphabétique en fin de ligne \1 : Affiche la référence à la sous-expression n°1 ;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé.
|