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 14/06/2007, 17h26   #1
Membre Expert
 
Avatar de SnakemaN
 
Bidouille-tout Android
Inscription : juillet 2006
Messages : 871
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Bidouille-tout Android

Informations forums :
Inscription : juillet 2006
Messages : 871
Points : 1 102
Points : 1 102
Par défaut [regxp] Filter des caracteres

Bonjour a tous me voila avec un petit problème d'expression régulière

j'ai des chaines de caractères comportant des caractères spéciaux et je ne voudrais afficher/trier/laisser QUE les lettres (majuscule et minuscule) et les chiffres

par exemple
Code :
1
2
3
4
 
[1H770EP
LL #220V
{OH BSZEYF
devient

Code :
1
2
3
1H770EP
LL220V
OHBSZEYF
Auriez vous une idée pour faire cela en shell/bash ?
Le mieux serais de prendre un fichier en entrée et de ressortir en sortie ce fichier trié, mais je ne sais pas comment appliquer un tel filtre

j'ai pensé à ça ce qui signifie pour moi tout caractère minuscule ou majuscule ou chiffre)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#!/bin/bash
#
# Trieur de chaines
#USAGE : ./trieur.sh </chemin/du/fichier/> <fichierdesortie.txt>
 
INFILE=$1
OUTFILE=$2
CURRENT_PATH=$(pwd)
 
#lecture ligne par ligne
   #si ca correspond au masque [a-z]*|[A-Z]*[0-9]*
cat $INFILE >> $CURRENT_PATH/$OUTFILE
mais je sais pas trop comment traiter un fichier ligne par ligne et y appliquer un regexp ?

Merci d'avance
__________________
C'est le signe d'un fou, qu'avoir honte d'apprendre
Ubuntu 10.04 Lucid Lynx @home
LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu
SnakemaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 19h59   #2
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par SnakemaN
j'ai des chaines de caractères comportant des caractères spéciaux et je ne voudrais afficher/trier/laisser QUE les lettres (majuscule et minuscule) et les chiffres

par exemple
Code :
1
2
3
4
 
[1H770EP
LL #220V
{OH BSZEYF
devient

Code :
1
2
3
4
 
1H770EP
LL220V
OHBSZEYF
Ça doit marcher

http://www.shellunix.com/regexp.html

sed "s/[^[:alnum:]]//g" $INFILE | sort > $CURRENT_PATH/$OUTFILE
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 21h52   #3
Membre Expert
 
Avatar de SnakemaN
 
Bidouille-tout Android
Inscription : juillet 2006
Messages : 871
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Bidouille-tout Android

Informations forums :
Inscription : juillet 2006
Messages : 871
Points : 1 102
Points : 1 102
Parfait !

Merci Beaucoup !

Sans vouloir abuser c'est possible de me l'expliquer un peu ?

(edit)
Si j'ai bien compris ça consiste a faire que sed va change toutes les occurrences des chaines qui ne sont pas alphanumérique (^[:alnum:]) par...rien (//)
Z'ai tout compris ou pô ?

[edit]
Et admettons que je veuille conserver que les Chiffres, Lettres, Underscore , Points-Virgule et Points ?

le masque devient "s/[^[:alnum:]_;.]//g" ?

Autoréponse : oui

bon ben voila Merci BlaireauOne
__________________
C'est le signe d'un fou, qu'avoir honte d'apprendre
Ubuntu 10.04 Lucid Lynx @home
LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu
SnakemaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 10h54   #4
Membre Expert
 
Avatar de SnakemaN
 
Bidouille-tout Android
Inscription : juillet 2006
Messages : 871
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Bidouille-tout Android

Informations forums :
Inscription : juillet 2006
Messages : 871
Points : 1 102
Points : 1 102
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
#
# Trieur de chaines
#USAGE : ./trieur.sh </chemin/du/fichier/entree> <fichierdesortie>
 
INFILE=$1
OUTFILE=$2
CURRENT_PATH=$(pwd)
 
#lecture ligne par ligne
# recopie toutes les lignes et les caracteres qui sont des chiffres
#et lettres en majuscule/minuscule, ou underscore ou point-virgule
#ou encore point
 
sed "s/[^[:alnum:]_;.]//g" $INFILE | sort > $CURRENT_PATH/$OUTFILE
__________________
C'est le signe d'un fou, qu'avoir honte d'apprendre
Ubuntu 10.04 Lucid Lynx @home
LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu
SnakemaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h56.


 
 
 
 
Partenaires

Hébergement Web