Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/12/2009, 15h11   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 125
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 125
Points : 12
Points : 12
Par défaut Extraction sous-chaine BASH

Bonjour,

Dans un script Bash j'ai du mal à extraire une soush-chaine.

J'ai pas exemple ce nom de fichier: n022.car

Et je dois en extraire le nombre 022

Sachant que le nombre peut comporter plus de 3 chiffres.

J'ai essayé plusieurs manières mais je n'arrive pas à trouver une solution générique pour prendre le nmobre entre le 'n' et le '.'.

Pouvez m'y aider ?

Merci beaucoup
touronster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2009, 15h35   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
Bonjour touronster,

Code :
1
2
3
4
5
var="n022.car"
sed 's/^\w\([0-9]*\).*/\1/' <<<"$var"
022
echo ${var//[[:alpha:].]/}
022
...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/12/2009, 16h09   #3
Nouveau Membre du Club
 
David
Inscription : avril 2009
Messages : 26
Détails du profil
Informations personnelles :
Nom : David
Âge : 40

Informations forums :
Inscription : avril 2009
Messages : 26
Points : 27
Points : 27
Salut touronster,
plusieurs possibilités existent pour arriver au résultat voulu, N_BaH a déjà donné un aperçu des possibilités.
Ci-dessous, le même résultat avec la commande cut
Code :
1
2
3
4
 
var="n022.car"
echo $var | cut -c2- | cut -d. -f1
022
A toi de choisir ta recette, bye.

Dernière modification par syjis ; 07/01/2010 à 07h41.
syjis est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 11h45   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 11
Points : 14
Points : 14
Bonjour,

je n'ai pas voulu créer de nouveau sujet car mon problème est similaire.
J'ai un pourcentage, par exemple 1% ou 50%.

Comment ne récupérer que le premier - ou les deux premiers quand il y en a deux - chiffres (sachant que je ne sais pas d'avance s'il y en a un ou deux) ?

Merci d'avance.
Alwaysin est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/06/2011, 12h13   #5
Membre Expert
 
Inscription : janvier 2011
Messages : 779
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 779
Points : 2 433
Points : 2 433
Salut,

Citation:
Envoyé par Alwaysin Voir le message
Bonjour,

je n'ai pas voulu créer de nouveau sujet car mon problème est similaire.
J'ai un pourcentage, par exemple 1% ou 50%.

Comment ne récupérer que le premier - ou les deux premiers quand il y en a deux - chiffres (sachant que je ne sais pas d'avance s'il y en a un ou deux) ?

Merci d'avance.
Code :
1
2
3
4
5
6
7
8
9
$ A="150%"

$ echo ${A/\%/}
150

$ A="1%"

$ echo ${A/\%/}
1
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 12h27   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 11
Points : 14
Points : 14
Merci pour la réponse !
Cela semble bon mais ça ne marche pas pour moi :/

Code :
1
2
3
4
5
6
A=$(df | awk 'NR==5 {print $5}')
echo $A
1%

echo ${A/\%/}
/mnt/dir/file.sh: ${A/...}: Bad substitution
Alwaysin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 13h09   #7
Membre Expert
 
Inscription : janvier 2011
Messages : 779
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 779
Points : 2 433
Points : 2 433
Faisons plus simple :

Code :
A=$(df | awk 'NR==5 { sub("%","",$5); print $5 }')
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 13h14   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 11
Points : 14
Points : 14
Cela fonctionne, merci beaucoup !

(A propos, je trouve cette façon de faire plus compliquée que l'autre :p)
Alwaysin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 15h19   #9
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 361
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : octobre 2008
Messages : 1 361
Points : 2 002
Points : 2 002
Une solution portable :
matafan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/07/2011, 00h39   #10
Futur Membre du Club
 
Homme
Technicien réseau
Inscription : avril 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Nouvelle-Calédonie

Informations professionnelles :
Activité : Technicien réseau
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2011
Messages : 15
Points : 17
Points : 17
Par défaut raccourcis de classes de caractères

bonjour, je décortique la réponse de N_BaH

Code :
sed 's/^\w\([0-9]*\).*/\1/' <<< "$var"
et la signification du \w (minuscule)

J'ai lu que \w était un raccourci de classe qui correspondait à un mot pouvant contenir les caractères alphanumériques _a-zA-Z0-9 (??)

Si je teste la commande sed NON PAS avec var="n022.car", mais avec var="nnnn022.car", ca ne marche pas; j'en déduis que je n'ai pas compris ce que représentait \w

puis je avoir une explication ?, et pourrais je savoir POUR BASH où est ce qu'on peut trouver le tableau et la signification de ces raccourcis (s'il s'agit bien d'un raccourci). Dans l'abs-guide, je ne l'ai pas trouvé ????

Dernière modification par al1_24 ; 06/07/2011 à 10h50. Motif: Balises CODE
syncope_nc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/07/2011, 09h53   #11
Membre Expert
 
Inscription : janvier 2011
Messages : 779
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 779
Points : 2 433
Points : 2 433
Salut,
Citation:
Envoyé par syncope_nc Voir le message
J'ai lu que \w était un raccourci de classe qui correspondait à un mot pouvant contenir les caractères alphanumériques _a-zA-Z0-9 (??)
En fait la définition serait plutôt : raccourci d'une classe correspondant à UN caractère alphanumérique (underscore compris) _a-zA-Z0-9

On aurait tout aussi bien pu écrire (pour le cas de départ (var=n022.car") :
Code :
sed 's/.\([0-9]*\).*/\1/'
ou encore :
Code :
sed 's/[[:alpha:]]*\([0-9]*\).*/\1/'

Citation:
Si je teste la commande sed NON PAS avec var="n022.car", mais avec var="nnnn022.car", ca ne marche pas; j'en déduis que je n'ai pas compris ce que représentait \w

puis je avoir une explication ?
Voir ci-dessus.
La solution qui marche :
Code :
sed 's/[[:alpha:]]*\([0-9]*\).*/\1/'
Citation:
et pourrais je savoir POUR BASH où est ce qu'on peut trouver le tableau et la signification de ces raccourcis (s'il s'agit bien d'un raccourci). Dans l'abs-guide, je ne l'ai pas trouvé ????
Substitution de paramètres
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 17h02.


 
 
 
 
Partenaires

Hébergement Web