GNU/Linux >> Linux Esercitazione >  >> Linux

Bash =~ Regex e HTTPS://regex101.com/?

Utilizzando https://regex101.com/ ho creato un'espressione regolare per restituire la prima occorrenza di un indirizzo IP in una stringa.

RegExp:

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

RegExp inclusi i delimitatori:

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

Con la seguente stringa di prova:

eu-west                       140.243.64.99 

Restituisce una corrispondenza completa di:

140.243.64.99

Indipendentemente da ciò che provo con le ancore, ecc., il seguente script bash non funzionerà con l'espressione regolare generata.

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

Risposta accettata:

d è un modo non standard per dire "qualsiasi cifra". Penso che provenga da Perl, e molti altri linguaggi e utilità supportano anche le RE compatibili con Perl (PCRE). (e ad esempio GNU grep 2.27 in Debian stretch supporta il simile w per i caratteri delle parole anche in modalità normale.)

Bash non supporta d , però, quindi devi usare esplicitamente [0-9] o [[:digit:]] . Lo stesso per il gruppo non di acquisizione (?:..) , usa solo (..) invece.

Questo dovrebbe stampare match :

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

Linux
  1. Linux – Unire /usr/bin e /usr/sbin in /bin (gnu/linux)?

  2. Perché /bin/sh punta a /bin/dash e non a /bin/bash??

  3. Django static_root in /var/www/... - nessuna autorizzazione a collectstatic

  4. Come scoprire da quale cartella è in esecuzione un processo?

  5. unix:///var/run/supervisor.sock nessun file di questo tipo

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Perché mettere cose diverse da /home in una partizione separata?

Differenza tra /bin e /usr/bin

echo o print /dev/stdin /dev/stdout /dev/stderr

Perché sono necessari < o > per usare /dev/tcp