Commande sed : besoin d'aide ...
Résolu/Fermé
momsse
-
6 mai 2007 à 11:25
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 7 mai 2007 à 09:33
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 7 mai 2007 à 09:33
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 mai 2007 à 11:38
6 mai 2007 à 11:38
Salut,
sed 's/^[ \t]*//;s/[ \t]*$//';-))
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 ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 mai 2007 à 11:59
6 mai 2007 à 11:59
[jp@MDK tmpfs]$ cat plop
#au dessus il y a 4 lignes vides:
#au dessous il y en a 2:
[jp@MDK tmpfs]$ sed '/./,$!d' plop
#au dessus il y a 4 lignes vides: # Plus maintenant ;-))
#au dessous il y en a 2:
[jp@MDK tmpfs]$
;-))
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 !
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 mai 2007 à 12:30
6 mai 2007 à 12:30
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 ...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 mai 2007 à 13:22
6 mai 2007 à 13:22
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 !
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 mai 2007 à 14:41
6 mai 2007 à 14:41
sed '0,/toto/{s/toto/bobo/}';-))
momsse
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
6 mai 2007 à 14:50
6 mai 2007 à 14:50
Merci !
Tu pourrais me la décortiquer un peu pour le neuneu que je suis ... ?
Tu pourrais me la décortiquer un peu pour le neuneu que je suis ... ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
6 mai 2007 à 15:02
6 mai 2007 à 15:02
0,/toto/ : Adressage. Depuis le début du fichier (0, avec certaines versions de "sed" il faut remplacer le "0" par "1", question d'interprétation) jusqu'à la 1ère occurrence de "toto".
{s/toto/bobo/} : Substitution. Bon là tu sais non ? ;-)) Note juste que les accolades sont facultatives.
;-))
{s/toto/bobo/} : Substitution. Bon là tu sais non ? ;-)) Note juste que les accolades sont facultatives.
;-))
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 ...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 mai 2007 à 17:31
6 mai 2007 à 17:31
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
;-))
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
426
7 mai 2007 à 00:25
7 mai 2007 à 00:25
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 :)
@+
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
7 mai 2007 à 09:33
7 mai 2007 à 09:33
Salut Adrien,
Bien vu pour tout.
Merci ;-))
Bien vu pour tout.
Merci ;-))