Dengan grep
sintaks berikut saya ingin mencocokkan semua alamat IP dalam file (dari ksh
skrip)
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
Masalahnya: Ini juga cocok dengan kata-kata (IP) yang memiliki lebih dari 4 oktet:
1.1.1.1.1
atau
192.1.1.1.160
Bagaimana saya bisa mencocokkan IP yang valid dan hanya alamat IP dengan 4 oktet? Saya juga dapat menggunakan Perl - solusi sintaksis satu baris, jika grep
tidak berhasil.
regex
grep
ip-address
Jennifer
sumber
sumber
999.999.999.999
juga.192.1.4097
itu valid dan diterima oleh Linux glibc dan Windows.ping 2130706433
, Pada OS X:PING 2130706433 (127.0.0.1): 56 data bytes
.0x7f.1
dan0177.1
Jawaban:
coba ini:
yang cocok dengan semua ekspresi dari
0.0.0.0
hingga999.999.999.999
dengan
Anda hanya akan mendapatkan alamat IP
catatan:
pada solaris mungkin egrep akan melakukan pekerjaan itu.
sumber
grep -E <pattern> <file>
(atau, untuk hanya mencetak pertandingan:grep -Eo <pattern> <file>
1.1.1.1.1
tetapi menyembunyikan yang terakhir.1
dari output, saya tidak bisa melihat bagaimana itu bisa membantu.Bagaimana dengan ini:
sumber
192.1.1.1.160
sebagai192.1.1.1
, yang saya pikir baik untuk penanya pertanyaan.)Itu
panji untuk
grep
membuatnya hanya cocok pada batas kata, yang berarti bahwa pasangan Anda harus dikelilingi oleh spasi atau mulai / berakhir pada awal / akhir baris!sumber
Untuk hanya menemukan kecocokan dengan 4 oktet persis (tidak termasuk hal-hal seperti 1.1.1.1.1) gunakan ini:
Seharusnya tidak pernah mendeteksi alamat non-IP. Ungkapan bisa lebih kompleks untuk memverifikasi lebih banyak hal tetapi ini harus bekerja untuk sebagian besar kasus. Ini tidak akan cocok dengan 0 sebelumnya karena 010.1.12.1 bukan cara yang umum untuk menulis alamat IP.
sumber
sumber
Agak rumit, tetapi seharusnya berhasil:
sumber
127.000.000.001
itu? ;-)ping 127.000.000.001
pasti berfungsi di Mac saya. Tetapi kemudian: Saya baru belajar bahwa bahkanping 2130706433
menghasilkan hasil yang sama. :-) Ups,ping 00127.00000.00000.00001
terjemahkan ke87.0.0.1
. Aneh ... Atau oktal mungkin? Ya, oktal pasti, jadi Anda benar tentang memimpin nol kurasa.Versi modifikasi dari jawaban Arnaud B.
Ungkapan ini tidak akan cocok dengan alamat IP dengan awalan 0s. misalnya, itu tidak akan cocok dengan 192.168.1.01 Ungkapan ini tidak akan cocok dengan alamat IP dengan lebih dari 4 oktet. misalnya, itu tidak akan cocok dengan 192.168.1.2.3
sumber
Saya menggunakan
egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts
untuk mencocokkan alamat IP di awal baris. Ini juga dapat digunakan tanpa^
mengizinkan spasi putih atau karakter lain sebelum alamat IP.sumber
Versi pendek dari regex panjang:
Silakan gunakan grep -E atau egrep yang sesuai dengan versi OS Anda
sumber
echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'
=> tidak ada hasilgrep -Eo '([0-9] {1,3}.?) {4}'
Contoh: curl http://korben.info/ip | grep "IP terlihat depuis mon serveur" | grep -Eo '([0-9] {1,3}.?) {4}'
sumber
Ekspresi reguler untuk mencocokkan alamat ip dalam TCL
sumber
Inilah yang bekerja untuk saya untuk ksh dan ksh93 di AIX:
ip =
[[$ ip == [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9])]] && echo OK || gema NOK Di atas dapat dimodifikasi untuk "menyaring" IP yang disediakan untuk pola apa pun yang diinginkan.
sumber