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