Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
sed
Envoyé par: moueza

poub contient

/home/peter/moi.c
/home/azazazez/aazzzae/pou.txt

Je fais cat poub |sed -e 's/\/\*\///g'
devrait me donner que les noms des fichiers sans les répertoires
dc moi.c
pou.txt

ms ça ne remplace rien , peut etre parce qu'il ne sait pas s'il faut remplacer /../ ou /../../

Comment faire alors?

Poste le Wednesday 14 March 2007 14:52:13
Répondre     Citer    
Re: sed

utiliser basename, par exemple
fich=$HOME/moi.c
bas=$(basename $fich)
echo bas= $bas
affiche bas= moi.c

Pour les détails, RTFM, car basename a d'autres utilités.

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Wednesday 14 March 2007 15:01:06
Répondre     Citer    
Re: sed
Envoyé par: oudoubah

Basile a une meilleure solution que l'utilisation de sed pour ce que tu veux faire.

Néanmoins, voici comment utiliser sed :
Citation
moueza
cat poub |sed -e 's/\/\*\///g'

Ce que tu lui demande, c'est de remplacer la chaine de caractère /* par rien.

Déjà, sed s'en sort très bien tout seul, pas besoin de cat :
sed -e 'commande' < poub

Ensuite, pour l'utilisation de sed, le plus simple serait d'utiliser comme séparateur qui n'existe pas dans ton fichier. Par exemple prenons le symbole ² (pour plus de lisibilité).
Ensuite, on va dire à sed de remplacer la chaine de caractère par le dernier ensemble ne contenant pas /
sed 's²^.*/\([^/]*\)$²\1²' < poub

Si tu veux apprendre sed, commence par regarder comment on écrit les expressions régulières ];-)

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 15 March 2007 07:55:05
Répondre     Citer    
Re: sed
Envoyé par: moueza

Euh je n'ai pas tout compris à loa dernière commande .
Dans :
sed 's²^.*/\([^/]*\)$²\1²' < poub

.où est la chaine cible et où est la chaine de remplacement, car je ne distingue pas /cibl/remplacement/
.'s :est-ce ça qui indique une substitution?
.pourquoi il n'est pas séparé du reste de la chaine ?

Merci.

Poste le Saturday 17 March 2007 10:07:26
Répondre     Citer    
Re: sed
Envoyé par: Raph__

Salut,

angry smiley) :-)
Franchement c'est un exemple de la mort pour un débutant.
Dans le manuel de sed il n'y a pas de détail sur cette petite subtilité qui permet de définir le caractère séparateur. En effet, le caractère suivant le 's' définit le caractère séparateur. Ex: sed 's#toto#tata#' fichier
Ceci dit,
sed 's/.*\///' fichier
Me semble tout aussi efficace, et plus lisible :-)

Note: Pas besoin de redirection, sed sait lire dans un fichier.

Poste le Saturday 17 March 2007 21:35:47
Répondre     Citer    
Re: sed
Envoyé par: oudoubah

Citation
Raph__
Franchement c'est un exemple de la mort pour un
débutant.
C'est vrai que l'écriture méritait un peu plus d'explications :ange:

Citation
Raph__
Dans le manuel de sed il n'y a pas de détail sur
cette petite subtilité qui permet de définir le
caractère séparateur. En effet, le caractère
suivant le 's' définit le caractère séparateur.
Ex: sed 's#toto#tata#' fichier
Ceci dit,
sed 's/.*\///' fichier
Me semble tout aussi efficace, et plus lisible

Lorsqu'il y a des /, je prefère nettement utiliser un autre caractère, plutôt que d'avoir des \/ partout. C'est, amha, beaucoup plus lisible. Un exemple :
s/^\/[\/]\//\// par rapport à s~^/[^/]/~/~
Le tout est d'avoir un séparateur qui n'est pas contenu dans une chaine de caractère, et qui rend le tout lisible.

s²^.*/\([^/]*\)$²\1²
s² : on utilise ² comme séparateur
^ : début de ligne
.*/ : une chaine de caractère qui se finit par /
\( \) : ce qui est entre ces commandes sera mémorisé
[^/]* : une chaine de caractère ne contenant pas /
$ : fin de ligne
Ce qui donne : Mémorise la chaine de caractère après le dernier /

\1 : la première chaine mémorisée

Traduction : substitue la ligne par la chaine de caractère mémorisée.

C'est vrai que ma commande est plus complexe, mais j'ai déjà eu des surprises en faisant des commandes qui semblaient correctes. Plus de précision permet de faire rapidement des expressions régulières plus justes. Après, c'est une question d'habitude. A force d'en faire, cela est relativement lisible (de part l'utilisation d'autres séparateurs que le /)

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Monday 19 March 2007 10:15:04
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
sed
Posez dans ce forum les questions qui ne trouvent pas place dans les autres...

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons