Hướng dẫn lọc địa chỉ IP trong file text với bash shell

Trong bài viết này, mình sẽ hướng dẫn các bạn cách lọc địa chỉ IP trong file text trên Linux. Cực kì đơn giản với chương trình lệnh dùng để lọc thông tin text, đó chính là ‘grep‘. Các bạn lưu ý là sẽ có một số biểu thức (regular expression) mà các bạn cần nhớ khi sử dụng với ‘grep‘.

Giờ giả sử ta có nội dung file text như sau:

# cat demo.txt
This is normal IP : 192.168.100.15
This is invalid IP : 267.253.23.124
Another invalid IP : 666.777.888.999

1. Lọc khớp 4 dãy Octer IP

Với biểu thức sau sẽ match thông tin cả 4 dãy Octet IP từ “0.0.0.0” -> “999.999.999.999” .

"([0-9]{1,3}[\.]){3}[0-9]{1,3}"

Ví dụ:

# grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" demo.txt
192.168.100.15
267.253.23.124
666.777.888.999

 
Chú thích
: option của chương trình lệnh “grep

  • -E, –extended-regexp : sử dụng biểu thức mở rộng.
  • -o, –only-matching : chỉ hiển thị dữ liệu lọc được.

Nhưng mà như vậy thì chưa đúng phải không nào ? Vì 1 Octet IP không thể nào lớn hơn con số 255 được.

2. Chỉ lọc địa chỉ IP v4 khi khớp

Hãy sử dụng biểu thức ở dưới đây, sẽ đảm bảo lọc khớp đúng với thông tin IP Address v4. Nhưng ta sẽ sử dụng tool ‘egrep’, nâng cao khác của grep nhé.

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

Ví dụ:

# egrep -o "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" demo.txt
192.168.100.15

 
Các bạn có thể làm biến biểu thức, nếu nó quá dài nhìn khá bất tiện trong quá trình viết shell script chẳng hạn.

# regex="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
# egrep -o $regex demo.txt

Vậy là các bạn biết cách để lọc địa chỉ IP trong 1 file text rồi nhé.

Previous articleHướng dẫn liệt kê Vhost – Virtual Host trên Apache
Next articleHướng dẫn tắt route ZEROCONF – 169.254.0.0/16 route trên Linux
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !