Comment puis-je m'assurer qu'un coup de chaîne est alphanumérique, sans un trait de soulignement?
Je vais ajouter une fonctionnalité à un script qui va permettre à l'utilisateur de configurer le nom d'hôte d'un système Linux. Les règles, je suis de l'application sont les suivantes:
- Doit être comprise entre 2 et 63 caractères
- Ne doit pas commencer ou finir par un trait d'union
- Ne peut contenir que des caractères alphanumériques et des tirets; tous les autres caractères ne sont pas autorisés (y compris un trait de soulignement, ce qui signifie que je ne peux pas utiliser le \W regex symbole)
J'ai résolu les deux premiers dans la liste, mais je vais avoir de la difficulté à trouver comment vérifier si un bash chaîne ne contient que des lettres, des chiffres et des tirets. Je pense que je peux le faire avec une regex, mais j'ai du mal à comprendre comment (j'ai passé la dernière heure de recherche sur le web et la lecture des pages de man).
Je suis ouvert à l'aide de sed, grep, ou l'un des autres outils standard, mais pas Perl ou Python.
Vous devez vous connecter pour publier un commentaire.
Semble que cela devrait le faire:
Correspond à n'importe quel caractère alphanumérique, puis correspondance jusqu'à 61 caractères alphanumériques (y compris les traits d'union), alors correspond à n'importe quel caractère alphanumérique. Le minimum de la longueur de la chaîne est de 2, le maximum est de 63. Il ne fonctionne pas avec Unicode. Si vous avez besoin de travailler avec Unicode, vous aurez besoin d'ajouter des différentes classes de caractères à la place de
a-zA-Z0-9
mais le principe sera le même.Je crois que le bon
grep
expression qui va travailler avec Unicode est:Exemple D'Utilisation:
egrep
[:alnum:]
ne comprend pas les traits d'union plus.^
symbole ici[^[:alnum:]]
représentent négatif(non alpha et numérique caractères)? Mais le^
symbole ici^[[:alnum:]]
représententstarts with
? Et vous mentionnez qu'il fonctionne très bien avecUnicode
, avez-vous une référence? Merci!C'est un script bash test le premier paramètre s'il ne contient que des caractères alphanumériques ou des traits d'union. Il "tuyaux" le contenu de $1 en grep:
^
ici représentent négatif au lieu de la première occurrence?$
a en fonction de la configuration.C'est la dernière personne qu'il vous faut:
sed -e 's/[^[:alnum:]|-]//g'
vous pouvez le faire avec juste bash