Regex : négation chaine
Résolu
Fred
-
Fred -
Fred -
Bonjour,
Je souhaite faire un script bash qui accepte en paramètre des options complexe mais comme il peut être exécuté en tant que root, je voudrais contrôler ces paramètres.
Le script doit pouvoir accepter toutes les options de la commande lsof. Il ne doit pas y avoir dans les paramètres les caractères ";" ">" et "|" mais j'aimerais quand même autoriser "|grep".
Un extrait du script :
J'arrive à interdire ; > et |grep, mais je ne sais pas comment interdire le caractère | sauf s'il est suivit de "grep".
Pouvez-vous me dire comment écrire cette expression régulière ?
Je souhaite faire un script bash qui accepte en paramètre des options complexe mais comme il peut être exécuté en tant que root, je voudrais contrôler ces paramètres.
Le script doit pouvoir accepter toutes les options de la commande lsof. Il ne doit pas y avoir dans les paramètres les caractères ";" ">" et "|" mais j'aimerais quand même autoriser "|grep".
Un extrait du script :
forbidden='[;>]|(\|grep)'
if [[ ${params} =~ ${forbidden} ]]; then
echo "Caract interdit"
exit 3
fi
J'arrive à interdire ; > et |grep, mais je ne sais pas comment interdire le caractère | sauf s'il est suivit de "grep".
Pouvez-vous me dire comment écrire cette expression régulière ?
A voir également:
- Regex ne commence pas par
- Excel commence par - Forum Bureautique
- Excel si commence par ✓ - Forum Excel
- Je commence la nuit et je termine le matin ✓ - Forum Loisirs / Divertissements
- Bonjour je cherche la réponse à la devinette svp ✓ - Forum Loisirs / Divertissements
- Le document à télécharger comporte 19 pages. en numérotant automatiquement chaque page de ce document, on constate que sa numérotation ne commence pas à 1. quel nom d’animal apparaît sur la page avec le numéro 30 ? - Forum Bureautique
2 réponses
Salut,
A mon avis il faut que tu sépares en deux ton test. Un premier pour tester
A mon avis il faut que tu sépares en deux ton test. Un premier pour tester
[;>]et un second pour le pipe (
|). Puis si le pipe est intercepté, tu vérifies s'il est suivi ou non d'un
grep...
$ echo "blibli | grep blabla" | egrep -o '\| *grep'
| grep
$ echo "blibli |grep blabla" | egrep -o '\| *grep'
|grep
$ echo "blibli |sed blabla" | egrep -o '\| *grep'
$
hello
essayer avec grep, à vérifier
essayer avec grep, à vérifier
$ params='|grep'
$ [[ $(grep -P '[;>]|\|(?!grep)' <<<"$params") ]]&& echo stop ||echo ok
ok
$ params='|fgrep'
$ [[ $(grep -P '[;>]|\|(?!grep)' <<<"$params") ]] && echo stop || echo ok
stop
$ params='|'
$ [[ $(grep -P '[;>]|\|(?!grep)' <<<"$params") ]] && echo stop || echo ok
stop
$ params='a>'
$ [[ $(grep -P '[;>]|\|(?!grep)' <<<"$params") ]] && echo stop || echo ok
stop
$ params='|grap'
$ [[ $(grep -P '[;>]|\|(?!grep)' <<<"$params") ]] && echo stop || echo ok
stop
$
Par contre, il faudra que je prenne en compte le fait qu'il peut y avoir plusieurs caractères | un suivit de grep et un autre avec autre chose.
Merci pour votre réponse