J'ajoute une fonctionnalité à un script existant qui permettra à l'utilisateur de configurer le nom d'hôte d'un système Linux. Les règles que je fais applications sont les suivantes: p>
J'ai résolu les deux premiers dans la liste, mais j'ai des difficultés à comprendre comment vérifier si une chaîne Bash contient uniquement des lettres, des chiffres et des traits d'union. Je pense que je peux le faire avec une regex, mais j'ai du mal à comprendre comment (j'ai passé la dernière heure à rechercher sur le Web et à lire des pages de l'homme). P>
Je suis ouvert à l'utilisation de SED, Grep ou l'un des autres outils standard, mais pas Perl ou Python. P>
4 Réponses :
On dirait que cela devrait le faire: correspond à n'importe quel caractère alphanumérique, puis correspond à 61 caractères alphanumériques (y compris des traits d'union), puis correspond à n'importe quel caractère alphanumérique. La longueur minimale de la chaîne est 2, le maximum est de 63. Cela ne fonctionne pas avec Unicode. Si vous en avez besoin pour travailler avec Unicode, vous devez ajouter différentes classes de caractères à la place de i Croyez l'expression correcte exemple d'utilisation: p> A-ZA-Z0-9 code> mais le principe sera le même. P>
grep code> qui fonctionnera avec Unicode est: p>
Comment utilisez-vous la deuxième expression avec Grep? Je cherche des commutateurs dans la page d'homme mais sans succès: je fais écho à une chaîne qui devrait correspondre et rien n'est émis.
@Montecristo: grep -e code> ou
Egrep code>
J'ai essayé avec ceci: echo 1ASDAS * _- | grep -e '^ [[: alnum:]] [- [: alnum:]] {0,61} [[: alnum:]] $', sans sortie (aussi sans guillemets), lol je devrais demander à un question que je pense ...: p
@Montecristo: Votre chaîne de test contient un astérisque et un soulignement et se termine dans un trait d'union, dont aucun n'est autorisé par l'expression.
@Welbog: Merci beaucoup, je me manquai totalement de savoir comment utiliser ça: p
[: alnum:] code> n'inclut plus les traits d'union.
@Welbog puis-je demander que le symbole ^ code> ici
[^ [: alnum:]] code> représente la négativité (tous les caractères non alpha et numériques)? Mais le symbole
^ code> ici
^ [[[: alnum:]]] code> représente
commence par code>? Et vous mentionnez qu'il fonctionne bien avec
Unicode code>, avez-vous une référence? Merci!
Comment utilisez-vous cela
@Alexandermills: intersérder.net/tips/kb/linux- grep-commande-usage-exemples
Ceci est pour le dernier dont vous avez besoin: SED -E 'S / [^ [: ALNUM:] | -] // g' code> p> p>
Il s'agit d'un script Bash testant le premier paramètre s'il ne contient que l'alphanumérique ou des traits d'union. Il "pipes" le contenu de 1 $ en Grep:
Pourquoi ^ code> représente ici la négativité au lieu de la première occurrence?
Cela signifie «début de ligne», donc chaque caractère entre celui-ci et $ code> doit correspondre au motif.
Vous pouvez le faire avec juste bash