GNU/Linux >> Belajar Linux >  >> Linux

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

Menggunakan https://regex101.com/ Saya membuat ekspresi reguler untuk mengembalikan kemunculan pertama alamat IP dalam sebuah string.

RegExp:

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

RegExp termasuk pembatas:

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

Dengan string uji berikut:

eu-west                       140.243.64.99 

Ini mengembalikan kecocokan penuh:

140.243.64.99

Tidak peduli apa yang saya coba dengan jangkar dll, skrip bash berikut tidak akan berfungsi dengan ekspresi reguler yang dihasilkan.

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

Jawaban yang Diterima:

d adalah cara yang tidak standar untuk mengatakan "setiap digit". Saya pikir itu berasal dari Perl, dan banyak bahasa dan utilitas lain mendukung RE yang kompatibel dengan Perl (PCRE), juga. (dan misalnya GNU grep 2.27 di Debian stretch mendukung w . yang serupa untuk karakter kata bahkan dalam mode normal.)

Bash tidak mendukung d , jadi Anda harus secara eksplisit menggunakan [0-9] atau [[:digit:]] . Sama untuk grup yang tidak menangkap (?:..) , cukup gunakan (..) sebagai gantinya.

Ini harus mencetak match :

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

Linux
  1. Django static_root di /var/www/... - tidak ada izin untuk mengumpulkan statis

  2. Bagaimana cara mengetahui dari folder mana suatu proses sedang berjalan?

  3. unix:///var/run/supervisor.sock tidak ada file seperti itu

  1. Mengapa meletakkan hal-hal selain /home ke partisi terpisah?

  2. Perbedaan antara /bin dan /usr/bin

  3. gema atau cetak /dev/stdin /dev/stdout /dev/stderr

  1. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  2. Debian – Memindahkan /var, /home Untuk Memisahkan Partisi?

  3. Mengapa < atau > diperlukan untuk menggunakan /dev/tcp