Commande sed : besoin d'aide ...
Résolu
momsse
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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 !
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 !
A voir également:
- Commande sed : besoin d'aide ...
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
10 réponses
Je te remercie, ca me permet de mieux comprendre certaine expression rationnelle de sed !
L'exercice suivant consiste cette fois ci a supprimer les lignes vides (uniquement des retour à la ligne \n), mais uniquement les premières recontrés du fichier toto, exemple:
.................................................................................................................
Voila la tête de ma commande actuelle:
sed '/^\n*$/s/\n//1' toto
Une idée ?
L'exercice suivant consiste cette fois ci a supprimer les lignes vides (uniquement des retour à la ligne \n), mais uniquement les premières recontrés du fichier toto, exemple:
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 ?
Je te remercie mais comme indiqué je n'ai droit qu'a la commande s de sed, c'est ce qui rend l'exercice un peu plus coriace !
Une autre idée !
Merci encore pour tes réponses rapide !
Une autre idée !
Merci encore pour tes réponses rapide !
Re-
Ça je ne pense pas que ce soit possible.
Dans le mécanisme de substitution avec le switch "s", on remplace une chaîne par une autre, on ne la détruit pas !
La seule façon (à mon sens) d'éliminer des lignes vides c'est de les "détruire", et la seule façon de faire c'est avec le switch "d" ...
;-/
Ça je ne pense pas que ce soit possible.
Dans le mécanisme de substitution avec le switch "s", on remplace une chaîne par une autre, on ne la détruit pas !
La seule façon (à mon sens) d'éliminer des lignes vides c'est de les "détruire", et la seule façon de faire c'est avec le switch "d" ...
;-/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'aimerais aussi savoir pour ma compréhension pourquoi la commande suivante:
sed '/^\n/d' toto
Ne fonctionne pas, alors que ^\n corespond bien à l'adresse de lignes vides et pourquoi la commande qui suit fonctionne:
sed '/^\n*$/d'toto
Ca m'intrigue vraiment !
sed '/^\n/d' toto
Ne fonctionne pas, alors que ^\n corespond bien à l'adresse de lignes vides et pourquoi la commande qui suit fonctionne:
sed '/^\n*$/d'toto
Ca m'intrigue vraiment !
Encore une fois merci jipicy, tu pourrais m'expliquer la différence entre les 2 adresses suivantes:
/^\n/ et /^\n*$/
C'est dans le cadre de mon message précédant, j'avoue que je ne vois de différence avec la commande d mais pourtant la première ne fonctionne pas et la seconde ci ...
/^\n/ et /^\n*$/
C'est dans le cadre de mon message précédant, j'avoue que je ne vois de différence avec la commande d mais pourtant la première ne fonctionne pas et la seconde ci ...
La 2nd marche car elle est plus proche de la bonne syntaxe qui normalement est :
;-))
sed '/^$/d' fichierJe t'invite à jeter un oeil à cet article dans la FAQ faisant référence au fin de ligne : sed conversion retours chariots dos crlf unix lf
;-))
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:
Ma commande est celle la:
sed 's/toto/bobo/1' toto
Comment s'arrêter a la première occurence du fichier et non a la première de chaque ligne ?
Merci encore pour l'aide !
Ma commande est celle la:
sed 's/toto/bobo/1' toto
Comment s'arrêter a la première occurence du fichier et non a la première de chaque ligne ?
Merci encore pour l'aide !
Merci pour la décortication !
J'arrive au dernier exercice du chapitre sur sed et ca c'est je pense du haut niveau, voila ce qu'il faut faire:
En utilisant sed comme filtre, il faut écrire une commande sed de tel manière à ce qu'elle simule la commande basename, exemple:
J'avoue ne même pas savoir par ou commencer ...
J'arrive au dernier exercice du chapitre sur sed et ca c'est je pense du haut niveau, voila ce qu'il faut faire:
En utilisant sed comme filtre, il faut écrire une commande sed de tel manière à ce qu'elle simule la commande basename, exemple:
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
;-))
Bonsoir vous deux,
Héhé, mon exercice préféré :)
Pour ce dernier exercice, j'aurais fais d'une pierre deux coups:
Pour celui ou il faut utiliser exclusivement des substitution, bien que l'exercice soit idiot vu que les delete sont fait pour ça comme l'a précisé JP, j'ai une solution:
Sauf si un print est considéré comme une commande bien sur.
Pour toto, je pensais m'en tirer en utilisant des branches, mais la solution proposée me semble de loin la plus simple donc la meilleure :)
@+
Héhé, mon exercice préféré :)
Pour ce dernier exercice, j'aurais fais d'une pierre deux coups:
sed -r 's#^/.*/([a-zA-Z]+)/?$#\1#'
Pour celui ou il faut utiliser exclusivement des substitution, bien que l'exercice soit idiot vu que les delete sont fait pour ça comme l'a précisé JP, j'ai une solution:
sed -nr '/./,$s/(.*)/\1/p' plop
Sauf si un print est considéré comme une commande bien sur.
Pour toto, je pensais m'en tirer en utilisant des branches, mais la solution proposée me semble de loin la plus simple donc la meilleure :)
@+