Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Petit problème de sed ? de awk ?
Envoyé par: bugjargal

Bonsoir à tous.

J'ai besoin d'un petit coup de pouce :
J'ai un fichier qui contient toute une liste de fichiers générée à partir d'un find. Du genre :
/chemin/vers/le/fichier/nom du fichier

Je souhaite récupérer le nom du fichier d'un coté (pas de problème avec basename), et le chemin complet de l'autre. Dans certains chemins, j'ai des espaces.

Quelqu'un pourrait-il m'indiquer la méthode la plus efficace ?

Merci d'avance.

Poste le Tuesday 8 May 2007 23:07:18
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: tg(y)

Pour le chemin :
sed -e 's|\/[^/]*$||g'

Pour le nom de fichier :
sed -e 's|^.*\/||g'

Poste le Wednesday 9 May 2007 00:02:29
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: Mochi-mochi

Salut,

Sed semble effectivement indiqué pour ce genre de choses, mais tu peux également faire mumuse avec les rudimentaires mais très efficaces fonctions internes du shell :-) :

find $HOME | while read F; do echo -e "chemin : ${F%/*}\nfichier : ${F##*/}\n"; done

Poste le Wednesday 9 May 2007 18:19:44
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: bugjargal

Merci pour votre aide. Je vais me pencher sur vos propositions pour les comprendre...

Poste le Wednesday 9 May 2007 19:52:24
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: tg(y)

Mochi-mochi, le listing est déja dans un fichier. Donc ça donner plutôt :
|cat listing | while read F; do echo -e "chemin : ${F%/*}\nfichier : ${F##*/}\n"; done

Poste le Wednesday 9 May 2007 20:16:18
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: Raph__


Salut,

find sait affichier uniquement le nom des fichiers.
find -printf '%f\n'

Aussi basename peut être utile:
find -exec basename {} \;
ou

Pour le bash:
for file in $(< file.txt) ;
do echo ${file//*\//};
done
Cette commande est simple et efficace, mais il y a au moins une faille, je te laisse la trouver bugjargal. smiling smiley

A Ciao

Poste le Wednesday 9 May 2007 22:45:15
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: Mochi-mochi

Citation
tg(y)
Mochi-mochi, le listing est déja dans un fichier. Donc ça donner plutôt :
Oui, c'était juste pour faire une version "courte" au cas où la récupération dans le fichier ne serait qu'une piste de recherche.

Poste le Thursday 10 May 2007 18:28:39
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: bugjargal

Merci Ralph_, mais j'avais déjà basename... Qui est effectivement + fiable que ta petite boucle (pb avec les espaces qui font considérer à bash qu'il tombe sur une sous-chaîne non terminée par un / ;-)).

Mais merci à tous ceux qui m'ont fait découvrir cette façon d'utiliser les variables pour manipuler les chaînes de caractères.

Poste le Friday 11 May 2007 20:11:40
Répondre     Citer    
Re: Petit problème de sed ? de awk ?
Envoyé par: Sve@r

Citation
bugjargal
Merci Ralph_, mais j'avais déjà basename... Qui
est effectivement + fiable que ta petite boucle
(pb avec les espaces qui font considérer à bash
qu'il tombe sur une sous-chaîne non terminée par
un / ).
Ce problème des espaces est bien connu de ceux qui utilisent le "for".
Heureusement il y a une autre solution pour traiter des éléments: le "read" qui ne se base pas sur l'espace mais le "return" pour valider son info.
ex:
cat file.txt |while read file
do
   <... traitement de "$file" qui contient une ligne complète du fichier ...>
done

A chaque tour de boucle, le "read" s'arrêtera à chaque "\n" qui termine normallement chaque ligne du fichier "file.txt"

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Tuesday 22 May 2007 15:46:53
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Petit problème de sed ? de awk ?
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

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