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
- Je commence la nuit et je termine le matin ✓ - Forum Loisirs / Divertissements
- Excel si commence par ✓ - Forum Excel
- Expressions régulières "ne contient pas ..." ✓ - Forum Programmation
- Bonjour je cherche la réponse à la devinette svp ✓ - Forum Loisirs / Divertissements
- Musique qui commence doucement puis accélère techno - Forum Musique / Radio / Clip
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