Jak vygrepovat ve formátu IP
Jak napsat grep, aby našel IP adresy ve správném formátu? (* == znak [0-9])
tzn:
***.***.***.***
***.***.***.**
***.***.***.*
***.***.**.***
***.***.**.**
... atd
Jak napsat grep, aby našel IP adresy ve správném formátu? (* == znak [0-9])
tzn:
***.***.***.***
***.***.***.**
***.***.***.*
***.***.**.***
***.***.**.**
... atd
grep
nějak pomohl, protože grep
pouze hledá řádky, které výrazu vyhoví, ale nedokáže z nich vytáhnout kousky. K tomu slouží jiné nástroje, třeba sed
.Jenom pro úplnost, zapsat IP adresu regulárním výrazem stoprocentně není úplně jednoduchá úloha. I když se omezíme jen na IPv4, měli bychom v zásadě řešit to, že zdaleka ne všechny výrazy tvořené 1-3 číslicemi jsou v reálném světě platné (např. IP adresa tvořená číslem 345). IPv6 do toho zavádí další složitosti.
Tak nějak. Záleží na tom, jakou variantu regexpů používáte. Basic RE například používá \{m,n\}
a ne {m,n}
.
Nezapomeňte také pokrýt začátek a konec adresu, to vaše řešení vybere také třeba 65536.666.666.16384.
Josef Kokeš ( 2014-12-15 21:30:06 +0100 )editVčera jsem jsem to potřeboval chtěl jsem se podívat na IP adresy v logu webservru. A stačilo mi toto: (výstup jsem kontroloval sám a byl jen pro účely hraní si -> do skriptu bych si to asi ještě rozmyslel)
grep -o -E [0-9a-f]\{4\}:[0-9a-f]\{4\}:[0-9a-f]\{4\}:[0-9a-f]\{4\}:[0-9a-f]\{4\}:[0-9a-f]\{4\}:[0-9a-f]\{4\}:[0-9a-f]\{4\}
grep -o -E [0-9]\{3\}.[0-9]\{3\}.[0-9]\{3\}.[0-9]\{3\}
Problém je ovšem složitější, záleží v jakém formátu se IP adresy vyskytují, hlavně třeba ten zkracovaný IPv6 formát může mít mnoho podob. Ale stačí trochu googlit: how to filter ipv4 and IPv6 addresses. Pokud se ovšem zabýváme i validitou, tak se RV podstatně zesložití.
Asked: 2014-12-15 20:24:42 +0100
Seen: 430 times
Last updated: Jan 18 '15