sed ne garder que les caractères avant un délimiteur

sed ne garder que les caractères avant un délimiteur - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 30-07-2008 à 11:12:12    

bonjour,
j'ai un nom de fichier que je voudrai renommer
ce fichier est du style nom-00000-122.000[...]
et biensûr moi je ne veux garder que les permiers caractères présent avant le premier délimiteur '-'
le résultat attendus est donc nom
 
pour ça je pense utiliser sed :
la commande suivante
echo "blabla-0001" | sed 's/\(.*\)-\(.*\)/\1/g' fonctionne, elle renvoi bien blabla
seulement si j'essaye avec
echo "blabla-0001-gggg.ggff" | sed 's/\(.*\)-\(.*\)/\1/g' , elle renvoi blabla-0001
 
merci de votre aide,
j'en profite aussi pour vous demander si vous savez comment faire pour dire que le délimiteur est soit un tiret '-' soit un point '.'

Message cité 1 fois
Message édité par dams78 le 30-07-2008 à 11:30:45

---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 30-07-2008 à 11:12:12   

Reply

Marsh Posté le 30-07-2008 à 12:10:53    

gandalf@scrubs:~$ echo "blabla-0001-gggg.ggff" | sed 's!^\([^-]*\)-.*$!\1!'
blabla


 
C'est surement pas le mieux mais ça marche.
 

Reply

Marsh Posté le 30-07-2008 à 12:11:51    

Au passage
 

gandalf@scrubs:~$ echo "blabla-0001-gggg.ggff" | awk -F'-' '{ print $1 }'
blabla


 
C'est bien plus adapté à ce que t'essaye de faire...

Reply

Marsh Posté le 30-07-2008 à 12:54:44    

merci, par contre serai t il possible de traiter le cas ou le délimiteur serait un autre caractère (un point) en même temps?


---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 30-07-2008 à 14:22:55    

c'est pas plus simple d'utiliser cut ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-07-2008 à 14:28:44    

zecrazytux a écrit :

c'est pas plus simple d'utiliser cut ?


je ne sais pas, j'avais pensé à sed dès le début c'est pour ça ;)


---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 30-07-2008 à 14:44:07    

dams78 a écrit :

seulement si j'essaye avec
echo "blabla-0001-gggg.ggff" | sed 's/\(.*\)-\(.*\)/\1/g' , elle renvoi blabla-0001

Si c'est pour ne garder que le premier champ, j'utiliserais plutôt une regexp dans ce style ; ce sera plus robuste :

~> echo "blabla-0001-gggg.ggff" | sed -e 's/-.*//'
blabla


 
 

dams78 a écrit :

j'en profite aussi pour vous demander si vous savez comment faire pour dire que le délimiteur est soit un tiret '-' soit un point '.'

~> echo "blabla-0001-gggg.ggff" | sed -e 's/[-.].*//'
blabla
~> echo "blabla.0001-gggg.ggff" | sed -e 's/[-.].*//'
blabla



---------------
TriScale innov
Reply

Marsh Posté le 30-07-2008 à 15:26:46    

en fait j'utilise cette commande :

Code :
  1. echo "$file" | awk -F'-' '{ print $1 }' | awk -F'.' '{ print $1 }'


parceque ta solution franceso ne fonctionne pas si le fichier est par exemple fichier1.0001
 
merci de votre aide

Message cité 1 fois
Message édité par dams78 le 30-07-2008 à 15:26:56

---------------
dam's (debianer), ma galerie Flickr
Reply

Marsh Posté le 30-07-2008 à 15:32:24    

dams78 a écrit :

parceque ta solution franceso ne fonctionne pas si le fichier est par exemple fichier1.0001

> echo fichier1.0001 | sed -e 's/[-.].*//'
fichier1
> echo fichier1.0001 | awk -F'-' '{ print $1 }' | awk -F'.' '{ print $1 }'
fichier1

:??:
 
Je comprends pas trop... qu'est-ce qui ne marche pas avec ma solution ? (non pas que la tienne soit mauvaise, mais pourquoi utiliser deux commandes lorsqu'on peut n'en utiliser qu'une ?)


---------------
TriScale innov
Reply

Marsh Posté le 30-07-2008 à 16:41:39    

heuuu wé j'ai du me tromper, j'avais peut être mal recopié ta commande ou testé une ancienne, toutes mes excuses ;)


---------------
dam's (debianer), ma galerie Flickr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed