Saya sedang menulis sebuah skrip untuk mencari ping dari IP asing asing, tetapi saya mengalami kesulitan memahami cara memformat perintah "grep" saya .. Di dalam file teks saya adalah output dari perintah "netstat anp". Di windows, saya dapat mencapai ini dengan perintah berikut:
grep -oP (\d{1,3}\.){1,3}\d{1,3} inc.txt
Output dalam file teks diformat seperti itu:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 1 172.18.24.12:51699 72.21.91.17:https FIN_WAIT1
tcp 0 1 172.18.24.12:55154 71.19.176.223:https FIN_WAIT1
tcp 0 1 172.18.24.12:59926 173.194.46.89:http FIN_WAIT1
(Saya berencana memfilter alamat lokal keluar). Tapi sepertinya saya tidak tahu bagaimana saya bisa memformat perintah ini untuk skrip bash saya. Saya kira seseorang di sini tidak bisa membantu saya dengan ini? Bantuan selalu dihargai.
netstat
dalam pertanyaan Anda? Ada banyak opsi berbeda dan jauh lebih mudah jika kami tahu apa yang Anda lihat.$ echo 3.4.5.6 | grep -oP (\d{1,3}\.){1,3}\d{1,3}
gagal bahkan tanpa semua output nestat. Anda seharusnya memposting kesalahan, misalnyabash: syntax error near unexpected token
('' Dan Anda seharusnya menyatakan bahwa Anda baik-baik saja dengan regex itu secara logis. Dan karena Anda mendapatkan kesalahan sintaks (yang tidak Anda nyatakan), Anda harus mencoba regex yang lebih sederhana seperti `$ echo 123 | grep -oP (\ d)` `dan melihat kesalahan yang sama. Anda tidak menunjukkan upaya pemecahan masalah.Jawaban:
Mengutip regex sepertinya bekerja untuk saya:
Edit oleh barlop-
Atau seperti yang diberikan Scott, sedikit lebih spesifik
'(\d{1,3}\.){3}\d{1,3}'
jika Anda ingin membuatnya jadi tepatnya 4 oktet tidak lebih tidak kurang.sumber
172.18
atau172.18.24
. Anda mungkin bisa menggunakannya(\d{1,3}\.){4}\d{1,3}
untuk membuatnya sedikit lebih ketat.(\d{1,3}\.){3}\d{1,3}
.grep -oP (\d{1,3}\.){1,3}\d{1,3} inc.txt
Metode penemuan berturut-turut yang bekerja dari skrip atau dari shell adalah ini:
Sebagai contoh misalkan kita mencari 72.21.95.46
Anda kemudian dapat memfilter output tersebut dengan greps berikutnya untuk membatasi IP ke keluarga atau IP unik:
dari shell Anda dapat menggunakan "ulangi perintah sebelumnya dengan bang bang":
dari naskah
dan seterusnya.
Untuk mendapatkannya dalam satu kesempatan, katakan saja
titik-titik akan diperluas ke karakter tunggal apa pun
jika Anda terbang menggunakan pesawat ulang-alik:
sumber