Za pomocą następującej grep
składni chcę dopasować cały adres IP w pliku (ze ksh
skryptu)
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
Problem: pasuje również do słów (IP), które mają więcej niż 4 oktety:
1.1.1.1.1
lub
192.1.1.1.160
Jak mogę dopasować prawidłowy adres IP i tylko adresy IP z 4 oktetami? Mogę również użyć Perla - jedno liniowego rozwiązania składni, jeśli grep
nie działa.
regex
grep
ip-address
Jennifer
źródło
źródło
999.999.999.999
.192.1.4097
są prawidłowe i akceptowane przez glibc Linux i Windows.ping 2130706433
Na OS X:PING 2130706433 (127.0.0.1): 56 data bytes
.0x7f.1
i0177.1
Odpowiedzi:
Spróbuj tego:
który pasuje do wszystkich wyrażeń od
0.0.0.0
do999.999.999.999
z
dostaniesz tylko adresy IP
Uwaga:
na Solaris prawdopodobnie egrep wykona zadanie.
źródło
grep -E <pattern> <file>
(lub, aby po prostu wydrukować dopasowania:grep -Eo <pattern> <file>
1.1.1.1.1
ale ukrywa ostatnią.1
z danych wyjściowych, nie widzę, jak to może pomóc.Jak to jest:
źródło
192.1.1.1.160
as192.1.1.1
, co moim zdaniem jest w porządku dla pytającego.)The
flaga, aby
grep
dopasować ją tylko na granicach słów, co oznacza, że twoje dopasowanie musi być otoczone białymi spacjami lub początkiem / końcem na początku / końcu linii!źródło
Aby znaleźć dopasowania dokładnie z 4 oktetami (z wyjątkiem rzeczy takich jak 1.1.1.1.1), użyj tego:
Nigdy nie powinien wykrywać adresów innych niż IP. Wyrażenie może być bardziej złożone, aby zweryfikować więcej rzeczy, ale powinno to działać w większości przypadków. Nie będzie pasować do poprzedniego 0, ponieważ 010.1.12.1 nie jest powszechnym sposobem zapisywania adresów IP.
źródło
źródło
Trochę trudne, ale powinno działać:
źródło
127.000.000.001
wtedy? ;-)ping 127.000.000.001
pewnością działa na moim Macu. Ale potem: właśnie się dowiedziałem, żeping 2130706433
daje to ten sam rezultat. :-) Ups,ping 00127.00000.00000.00001
przekłada się na87.0.0.1
. Dziwne ... A może ósemkowe? Tak, ósemkowe na pewno, więc myślę, że masz rację co do zer wiodących.Zmodyfikowana wersja odpowiedzi Arnauda B.
To wyrażenie nie będzie pasowało do adresów IP z wiodącymi zerami. np. nie będzie pasować 192.168.1.01 To wyrażenie nie będzie pasowało do adresów IP zawierających więcej niż 4 oktety. np. nie będzie pasować 192.168.1.2.3
źródło
Używam
egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts
do dopasowania adresów IP na początku linii. Można go również używać bez^
znaku spacji lub innych znaków przed adresem IP.źródło
Krótsza wersja długiego wyrażenia regularnego:
Użyj grep -E lub egrep, odpowiednio do twojej wersji systemu operacyjnego
źródło
echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'
=> brak wynikówgrep -Eo '([0-9] {1,3}.?) {4} ”
Przykład: curl http://korben.info/ip | grep "IP widoczny depuis mon servur" | grep -Eo '([0-9] {1,3}.?) {4} ”
źródło
Wyrażenie regularne dla dopasowania adresu IP w TCL
źródło
Oto, co działało dla mnie dla ksh i ksh93 w systemie 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 || echo NOK Powyższe informacje można zmodyfikować w celu „przefiltrowania” podanego adresu IP do dowolnego pożądanego wzoru.
źródło