GNU/Linux >> Tutoriels Linux >  >> Linux

Bash =~ Regex et Https://regex101.com/?

En utilisant https://regex101.com/ j'ai créé une expression régulière pour renvoyer la première occurrence d'une adresse IP dans une chaîne.

RegExp :

(?:d{1,3}.)+(?:d{1,3})

RegExp incluant les délimiteurs :

/(?:d{1,3}.)+(?:d{1,3})/

Avec la chaîne de test suivante :

eu-west                       140.243.64.99 

Il renvoie une correspondance complète de :

140.243.64.99

Peu importe ce que j'essaie avec les ancres, etc., le script bash suivant ne fonctionnera pas avec l'expression régulière générée.

temp="eu-west                       140.243.64.99            "
regexp="(?:d{1,3}.)+(?:d{1,3})"
if [[ $temp =~ $regexp ]]; then
  echo "found a match"
else
  echo "No IP address returned"
fi

Réponse acceptée :

d est une façon non standard de dire "n'importe quel chiffre". Je pense que cela vient de Perl, et beaucoup d'autres langages et utilitaires prennent également en charge les RE compatibles Perl (PCRE). (et par exemple, GNU grep 2.27 dans Debian Stretch prend en charge le même w pour les caractères de mot même en mode normal.)

Bash ne prend pas en charge d , cependant, vous devez donc utiliser explicitement [0-9] ou [[:digit:]] . Idem pour le groupe non capturant (?:..) , utilisez uniquement (..) à la place.

Cela devrait imprimer match :

temp="eu-west                       140.243.64.99            "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match

Linux
  1. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  2. Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

  3. Debian – Déplacer /var, /home vers une partition séparée ?

  4. Linux – Fusionner /usr/bin et /usr/sbin dans /bin (gnu/linux) ?

  5. Installer les binaires dans /bin, /sbin, /usr/bin et /usr/sbin, interactions avec --prefix et DESTDIR

Pourquoi /bin/sh pointe-t-il vers /bin/dash et non /bin/bash ? ?

Comprendre les fichiers /proc/mounts, /etc/mtab et /proc/partitions

Django static_root dans /var/www/... - aucune autorisation pour collectstatic

Comment savoir à partir de quel dossier un processus est en cours d'exécution ?

unix:///var/run/supervisor.sock aucun fichier de ce type

Pourquoi < ou > sont-ils nécessaires pour utiliser /dev/tcp