#1 Le 03/04/2018, à 22:01
- Eva.exe
Tester si une variable contien un caractère.
Bonjour a tous !
Je commence a me lancer dans le bash, enfin, dans la programmation, et aujourd'hui mon premier besoin nécessitant des compétences :
Filtrer un fichier texte ligne par ligne,
en gros
Ajout de la ligne dans $var
IF $var contien un caractère NON alphanumérique
alors ligne suivante
si non afficher $var
ligne suivante
Je bloque a la ligne IF,
en effet, je n'ai aucune idée de comment réaliser cette opération,
Pour le reste, le script ressemblerais a :
#! /bin/bash
while read line
if [ ! "$var contient variable alphanumérique" ]
then
echo -e "$line\n"
done < test.txt
Hors ligne
#2 Le 03/04/2018, à 22:19
- Watael
Re : Tester si une variable contien un caractère.
salut,
et pourquoi pas un simple grep sur le fichier ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 03/04/2018, à 22:26
- DonutMan75
Re : Tester si une variable contien un caractère.
Hello,
je n'ai pas de Linux sous la main pour tester... mais est-ce que la ligne suivante ne ferait pas l'affaire ?
#! /bin/bash
while read line
[[ ! "$var" =~ [0-9] ]] && echo -e "$line\n"
< test.txt
Concernant l'opérateur "=~", voir par exemple : https://unix.stackexchange.com/question … at-does-do
Par ailleurs, if [ toto ] est redondant, on peut juste laisser [ toto ]
Bon courage pour la suite
Bonne soirée,
Donut
Hors ligne
#4 Le 03/04/2018, à 22:56
- Eva.exe
Re : Tester si une variable contien un caractère.
Bonsoir,
Concernant grep j'ai déja essayer, ca ne me convient pas.
Pour clarifier la chose,
J'ai un fichier text contenant plusieurs ligne
je veut que si la ligne contien STRICTEMENT un caractère ASII, alors elle est affiché,
J'ai un peut avancé
[\x00-\x7F] == caractère ASII
#! /bin/bash
while read line
do
if [[ $line =~ [\x00-\x7F] ]]
then
echo $line
fi
done < test.txt
le probléme c'est que ce script affiche toute les ligne contenant des char ASSI, meme si elle contien aussi des char non ASII,
Est ce que le souci vient de l'opérande ?
Merci,
Dernière modification par Eva.exe (Le 03/04/2018, à 23:02)
Hors ligne
#5 Le 03/04/2018, à 23:39
- Eva.exe
Re : Tester si une variable contien un caractère.
Voila quelque chose qui fonctionne pas trop mal :
#! /bin/bash
while read line
do
if [[ "$line" =~ [^[\ -~A-Za-z0-9]+ ]] ; then
peon="1" ;
else
echo $line
fi
done < test
Par contre, par quoi je peut remplacer "peon=1"
Il faudrait que le script passe a l'instruction suivante
Dernière modification par Eva.exe (Le 03/04/2018, à 23:40)
Hors ligne
#6 Le 03/04/2018, à 23:59
- Watael
Re : Tester si une variable contien un caractère.
Concernant grep j'ai déja essayer, ca ne me convient pas.
pourquoi ? quelle commande grep as-tu essayée ?
parce que, grep est justement fait pour ça : afficher les lignes (plus ou moins) qui correspondent à un motif !
c'est quoi un caractère "ASII" ?
tu parlais de caractère alphanumérique.
grep '^[[:alnum:]]' tonFichier
cf. man 7 regex
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 04/04/2018, à 06:20
- pingouinux
Re : Tester si une variable contien un caractère.
Bonjour,
@Eva.exe : Peux-tu donner un exemple de quelques lignes, avec le résultat que tu souhaites ?
Édité :
Si j'ai bien compris, peut-être ceci
LC_COLLATE=C egrep "^[ -~]+$" fichier
Dernière modification par pingouinux (Le 04/04/2018, à 08:37)
Hors ligne