GNU/Linux >> Znalost Linux >  >> Linux

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

Pomocí https://regex101.com/ jsem vytvořil regulární výraz pro vrácení prvního výskytu IP adresy v řetězci.

RegExp:

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

RegExp včetně oddělovačů:

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

S následujícím testovacím řetězcem:

eu-west                       140.243.64.99 

Vrátí úplnou shodu:

140.243.64.99

Bez ohledu na to, co zkouším s kotvami atd., následující bash skript nebude fungovat s vygenerovaným regulárním výrazem.

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

Přijatá odpověď:

d je nestandardní způsob, jak říci „libovolná číslice“. Myslím, že pochází z Perlu a mnoho dalších jazyků a nástrojů podporuje také RE (PCRE) kompatibilní s Perl. (a např. GNU grep 2.27 v Debian stretch podporuje podobné w pro slovní znaky i v normálním režimu.)

Bash nepodporuje d , takže musíte explicitně použít [0-9] nebo [[:digit:]] . Totéž pro nezachycující skupinu (?:..) , použijte pouze (..) místo toho.

Toto by mělo vytisknout match :

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

Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  3. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  1. Jak zjistit, ze které složky běží proces?

  2. Rozdíl mezi /bin a /usr/bin

  3. Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0

  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. /sys/ dokumentace?

  3. Měly by weby žít ve /var/ nebo /usr/ podle doporučeného použití?