Trong Ubuntu 16.04, tôi đã chạy ifconfig
并在 địa chỉ inet:MY_IP
Tôi thấy IP bên ngoài của mình ở định dạng .
Tôi đang cố gắng "đào" nó thành một biến theo những cách sau:
ipa=$(ifconfig | grep "inet addr:\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" )
和:
ipa=$(ifconfig | grep "inet addr:\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\ .")
Các phương pháp này hoạt động:
ipa=$(ifconfig | grep -Po 'inet addr:\K[^\s]+' | grep -v '^127')
Và
ipa=$(ifconfig | grep -A 1 eth0 | grep -Po "inet addr:(\d{1,3}\.){3}\d{1,3}" | cut -f2 -d:)
Nhưng tôi tự hỏi, tôi đã bỏ lỡ điều gì trong 2 lần thử đầu tiên.
gia hạn:
Có cách nào để chuyển đổi một grep
Với 4 nhóm (khái niệm tương tự như 2 nhóm trước), điều này có thực sự hoạt động trong POSIX BRE không?
bạn có thể thay thế\b
với phong cách cũ\<
Mặc dù nó có vẻ không phải là POSIX.
Cũng lưu ý rằng luân phiên (a|b)
Đúng grep -E
tính năng. Trong POSIX grep bạn có thể (kỳ lạ) gạch chéo ngược các cấu trúc này, nhưng tôi sẽ chọn grep -E
.
ipa=$(ifconfig | grep -E "inet addr:\<(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]? )\.")
Tuy nhiên, không cần có ranh giới từ; bạn đã biết ký tự bên trái là dấu hai chấm và ký tự bên phải là số.
Tôi là một lập trình viên xuất sắc, rất giỏi!