Saya memiliki skrip yang menghasilkan beberapa keluaran. Saya ingin memeriksa output itu untuk alamat IP seperti apa
159.143.23.12
134.12.178.131
124.143.12.132
if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //
Apakah fgrep
ide yang bagus?
Saya memiliki bash tersedia.
shell-script
grep
ip
Koshur
sumber
sumber
0010.0000.0000.0001
? Bolehkah file tersebut berisi hal-hal yang terlihat seperti alamat IP seperti nomor versi (soft-1.2.1100.1.tar.gz
, spesifikasi jaringan (10.0.0.0/24), 1.2.3.4.5)? Apakah Anda akan menerima solusi yang positif di 333.444.555.666? Atau0377.0377.0377.0377
(alamat IP quad-oktal yang valid)?bash
tersedia, makaawk
biasanya juga, jadi ini mungkin bekerja untuk Anda:awk '/([0-9]{2,3}\.){3}/ {print $5 "\t" $1}'
(Satu-liner ini menerjemahkan output dari daftar host XFR ke/etc/hosts
format.)Jawaban:
Ya, Anda memiliki banyak opsi / alat untuk digunakan. Saya baru saja mencoba ini, ini berhasil:
ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
sehingga Anda dapat menggunakan
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
untuk mengambil alamat ip dari output Anda.sumber
"\b([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9][0-9]?"
untuk menemukan CIDR (dengan asumsi mereka valid)mulai jawaban saya berdasarkan jawaban ini:
dan mengubah jawaban menjadi IPv6 panjang penuh, dll ...:
jika Anda ingin menyimpan / nnn jika ada:
dan juga ada versi singkat IPv6 yang mencakup '::'.
untuk jawaban IPv6 lainnya, Anda dapat melihat di sini: /programming/53497/ regular-expression-that-matches-valid-ipv6-addresses
sumber
fgrep
adalah nama lama untuk variangrep
yang mengabaikan pencocokan pola. Saya sarankan Anda menggunakangrep
(atau bahkanegrep
) sebagai gantinya, terutama karena Anda jelas menginginkan pencocokan pola.Jika file Anda dipanggil misalnya
ips
Anda dapat menulis sesuatu seperti:Kemudian Anda dapat melewatkan parameter sebagai ikuti skrip
sumber
Jika Anda memiliki daftar IP dalam file, satu per baris,
grep
sudah memiliki-f
opsi yang mudah :Ini dapat menyebabkan beberapa kesalahan positif karena string secara opsional diikuti oleh nomor lain untuk menjadikannya IP yang berbeda. Banyak hal yang dapat Anda lakukan, tergantung pada kasus Anda, Anda mungkin atau mungkin tidak memutuskan untuk khawatir.
sumber
Diuji dalam SmartOS (varian Solaris), semoga bekerja di lingkungan * nix lainnya:
Contoh:
Pola ini cocok hanya berlaku IPv4, yaitu,
x.x.x.x
di manax
berkisar dari 0-255. Jika Anda hanya perlu mengekstrak IP yang cocok, tambahkan-o
opsi ke perintah di atas. Anda bisa menanamkan perintah ini dalam skrip bash dan mungkin juga di skrip shell lain. Dan, jikaegrep
gagal,try grep -E ...
Menggunakannya dalam skrip shell (bash):
ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip
sumber
Saya pikir jawaban saya untuk posting lain lebih cocok di sini. Berkat posting ini dan yang lain-lain yang seperti itu saya datang dengan ini, yang mencari format IP yang benar, kemudian menghilangkan semua baris yang berisi 256 atau lebih tinggi. Ganti IP dengan sesuatu yang tidak valid untuk melihat tidak ada output sebagai gantinya:
Grep pertama mungkin ditemukan di pos ini dan memeriksa nomor dari 0-999 dalam format XXXX
Grep kedua menghapus garis dengan angka 256-999, sehingga hanya menyisakan IP format yang valid, jadi saya pikir
TAPI ... Seperti yang ditunjukkan oleh G-Man, saya keliru dengan menganggap IP akan berada di jalurnya sendiri. Paling selalu, akan ada ruang atau pembagi lain untuk dicari di kedua sisi IP. Spasi / pembagi dapat dihapus dengan sed atau cara lain setelah IP ditemukan. Saya juga menambahkan -o ke grep pertama:
Yang pertama dan kedua tidak akan menghasilkan output, sedangkan yang ketiga tidak dan spasi dilucuti.
sumber
grep
akan membuang garis itu karena "500". (Pertanyaan tidak pernah mengatakan bahwa alamat IP dalam file, jika ada, akan terhubung sendiri). Di sisi lain, ia akan menerima 1234.1.1.1 dan 1.1.1.1234. Tapi selain itu, tidak buruk.Redirect output itu ke beberapa
outputFile
Cukup
grep
dengan pola sebagai,sumber
.
ini adalah operator ekspresi reguler dan perlu melarikan diri untuk diperlakukan secara harfiahsumber