Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Ubuntu 18.04 LTS
Ubuntu-fr propose des clés USB de Ubuntu et toutes ses « saveurs » ainsi qu'un magnifique t-shirt pour cette toute nouvelle version d'Ubuntu !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/07/2018, à 01:10

vlk

Bash récupération une parie du nom de fichier.

Bonjour,
j'ai un fichier 1234_nom_autre.pdf.
j'aimerai savoir comment récupérer dans une variable tout ce qui se trouve avant le premier _ , dans mon exemple je veux récupérer 1234.

Merci.

Hors ligne

#2 Le 07/07/2018, à 03:47

Watael

Re : Bash récupération une parie du nom de fichier.

salut,

as-tu lu la doc indiquée par zipe31 ?


eval, c'est mal.

Hors ligne

#3 Le 07/07/2018, à 06:42

pingouinux

Re : Bash récupération une parie du nom de fichier.

Bonjour,

nom="1234_nom_autre.pdf"

Voici trois méthodes :

prefix=$(cut -d_ -f1 <<<"$nom")
prefix=$(sed 's/_.*//' <<<"$nom")
prefix=$(grep -Eo '^[^_]+' <<<"$nom")

Édité :
Et pour ne rien récupérer si le nom ne contient pas de "_" :

prefix=$(sed -n 's/_.*//p' <<<"$nom")

ou

prefix=$(grep -Po '^[^_]+(?=_)' <<<"$nom")

Dernière modification par pingouinux (Le 07/07/2018, à 08:33)

En ligne

#4 Le 07/07/2018, à 09:01

MicP

Re : Bash récupération une parie du nom de fichier.

Bonjour

michel@debg53sw:~$ nom="1234_nom_autre.pdf"
michel@debg53sw:~$ echo ${nom%%_*}
1234
michel@debg53sw:~$ 

Dernière modification par MicP (Le 07/07/2018, à 09:02)

Hors ligne

#5 Le 07/07/2018, à 09:50

vlk

Re : Bash récupération une parie du nom de fichier.

Bonjour et merci pour vos pistes.
La solution à MicP fonctionne parfaitement. Quand à celle de pingouinux est plus complète.

Mais voila quand je fais :

nom="1234_nom_autre.pdf"
prefix=$(sed -n 's/_.*//p' <<<"$nom") ou prefix=$(grep -Po '^[^_]+(?=_)' <<<"$nom") ou les autres ....
echo $prefix

ça me renvoie : test.sh: 3: test.sh: Syntax error: redirection unexpected

Une idee sur ce qui cloche ?

Merci.

Hors ligne

#6 Le 07/07/2018, à 09:51

kholo

Re : Bash récupération une parie du nom de fichier.

salut,
+1 @MicP
je dirais même plus :

nom="1234_nom_autre.pdf"

echo "${nom}"
1234_nom_autre.pdf

echo "${nom#*_}"
nom_autre.pdf

echo "${nom##*_}"
autre.pdf

echo "${nom%_*}"
1234_nom

echo "${nom%%_*}"
1234
 

Dernière modification par kholo (Le 07/07/2018, à 09:52)

Hors ligne

#7 Le 07/07/2018, à 09:57

pingouinux

Re : Bash récupération une parie du nom de fichier.

@vlk #5 : Les commandes en #3 doivent être exécutées en bash, et non en sh.

En ligne

#8 Le 07/07/2018, à 10:08

vlk

Re : Bash récupération une parie du nom de fichier.

voiw cool ça fonctionne !

Merci bash, sh ça change quoi ?

Hors ligne

#9 Le 07/07/2018, à 10:59

pingouinux

Re : Bash récupération une parie du nom de fichier.

vlk #8 a écrit :

bash, sh ça change quoi ?

bash offre des possibilités supplémentaires, mais sh est plus portable.
Voici une syntaxe acceptée par sh :

prefix=$(echo "$nom" | sed -n 's/_.*//p')

ou

prefix=$(echo "$nom" | grep -Po '^[^_]+(?=_)')

En ligne

#10 Le 07/07/2018, à 13:29

vlk

Re : Bash récupération une parie du nom de fichier.

super, merci.

Hors ligne

#11 Le 07/07/2018, à 17:29

vlk

Re : Bash récupération une parie du nom de fichier.

J'ai encore une question,
est il possible après la réception d'un mail avec fetchmail extraire la pièce jointe pour la classer automatiquement ?
si oui quelqu’un a une piste ?

Merci.

Hors ligne

#12 Le 07/07/2018, à 20:23

Watael

Re : Bash récupération une parie du nom de fichier.

nouvelle question => nouveau sujet !


eval, c'est mal.

Hors ligne