Sziasztok,
Nem jutok előrébb, egy log fájlból kellene kiszednem paracssorban minden számot ami min 9 karakter hosszú. (lehet benne space, ".", és "-") de nem az IP.
Arra gondoltam valahogy szűrnöm kellene az IP 4-es formátumot, de nem tudom ,hogy lehetne ráilleszteni a kifejezésre.
Ezt ne nézze /((\d{1,3}\.){3}(\d{1,3}))/
de ezt keresse /([\d \(\)\.\-]{6,})/
Lehetséges, hogy ezt nem lehet egy lépésben megoldani?
Ahogy néztem nem lehet csak 2-es csoportot kinyerni grep-el.
grep -E "(([0-9]{1,3}\.){3}[0-9]{1,3})|([0-9 \(\)\.\-]{6,})" data.log
Hozzászólások
Én két lépcsőben csinálnám.
Előbb kiszűrném belőle az összes "talán" megfelelőt, majd ebből eldobnám azokat, amelyekben pontosan három, számok közé zárt pont van, de nincs "-".
Science for fun...
Nem olyan bonyolult, de lehet, most újat mutatok: :)
/(?!(\d{1,3}\.){3}(\d{1,3}))([\d \(\)\.\-]{6,})/
Ha kipróbálod ezen a pár soron, akkor kiderül, hogy nem jó.
https://regex101.com/r/fOe9gp/1
Én nem néztem, hogy jó-e, mindössze megmutattam, hogy lehet a két kifejezést összevonni. Aztán rájöttem, hogy persze, nem elég ennyi.
Ez elvileg az, amit szeretnél, de valljuk be, tipikusan ilyenkor mondom azt, hogy nem biztos, hogy jó ötlet egy kifejezést használni:
(?<![\d.-])(?:(?!(?:\d{1,3}\.){3}(?:\d{1,3}))[\d \(\)\.\-]){6,}
(Közben rájöttem, hogy még ez sem tökéletes, mert nem illeszkedik a "0.0.0.0.0" kifejezésre, pedig a specifikációd szerint erre kellene.)
Ez nem segíthet valahogyan?
https://www.shellhacks.com/regex-find-ip-addresses-file-grep/
nTOMasz
"The hardest thing in this world is to live in it!"
Pont az IP ami nem kellene.. minden más szám (azonosító) igen.
http://16843009
http://1.65793
ping 16843009
ping 1.65793
Nem tudom gondoltál-e arra, hogy az IPV6 címeket kell-e kezelned?
Regex peldak pl itt: https://www.oreilly.com/library/view/regular-expressions-cookbook/97805…
En mondjuk (G)AWK-val allnek neki.
Egyszeru kis pelda rekordok atugrasahoz (nem feltetlenul teljes sorok a rekordok, ugye? Persze, az RS-t es FS-t be kell allitani...)
seq 5 | awk '{ print "x",$0 } /2/ { getline; print "ketto", $0; getline } { print "y",$0 }'
Az IP cím nem szám, szóval ha eleve csak számokra szűrsz, akkor IP cím nem lehet benne.
A valódi problémád neked szerintem az, hogy először definiáld, hogy neked mi jelent az, hogy szám.
Az 12e3 egy szám lehet, ha megengedjük az ún. tudományos jelölést. De lehet, hogy csak egy négykarakteres azonosító.
Az IP cím csak számokból áll, de nem szám. A YYYY-mm-dd formátumú dátum is számokból áll, de nem szám. Őt meg kéne találnod?
A TAJ számok sem számok, csak számjegyekből álló stringek. Azért nem számok, mert például olyan szám nincsen, hogy "009 045 045". Őt meg kéne találnod?
A verziószámokat meg kéne találnod? Az, hogy 1.2.3, az nem szám, csak számokból áll, és hasonlít az IP címekhez. Őt meg kéne találnod?
Javaslom: https://hup.hu/comment/2462313#comment-2462313
Az IP cím nem szám, ugyanis vannak olyan számok a 0-2^32-1 intervallumban, amik nem valid IP címek, nem használhatók IP fejlécben forrásként, vagy célként. Az IP címnek van struktúrája, az egyes biteknek van jelentése, nem csak lineáris címek a 0..2^32-1 intervallumban.
Az, hogy a valid IP címek 32 bites számként is reprezentálhatók, az más kérdés.
Attól még ugyanúgy IP címek. Ahogy a Budapest, 1022. Százszorszép utca 44. is egy postai cím, annak ellenére, hogy nem létezik ilyen utca a II. kerületben.
Bármelyik IPv4-es IP-cím leírható egy legfeljebb 32 bites számmal, következésképpen minden IP-cím szám. Attól, mert az IP-címeket bizonyos szabályok szerint használjuk, még szám marad mindegyik.
Én meg ezt:
A log fájlba valami program ír. Hány programot ismersz, ami integer, hexa, oktális, bináris, vagy az általad felsorolt akármilyen formatterrel fog IP címet logolni? Lehet, hogy erős feltételezés a részemről, de én majdnem 100%-nak venném azt az esetet, hogy dotted quadként fogja minden kiírni.
Innentől kezdve pedig ez a thread teljesen értelmetlen.
Fogalmam sincs, mert nem írta milyen log fájl. Ahogy azt sem, hogy mi értelme az egésznek. Ha felhasználó àltal bevitt címek (is) naplózásra kerülnek, akkor lehet közöttük ilyen. Egy adatfolyamot is lehet naplózni. Igazából szerintem ha leírná pontosan mit naplóz, mire kell az egész, akkor egy triviális megoldás lenne rá..
Valojaban szam jellegu stringekre szur adott megkotesekkel (space, dot, dash lehet a szamkarakterek kozott), es ebbol meg ki szeretne dobni az IPv4 formatumu szam jellegu sorozatokat.
De igen, nem pontos az eredeti megfogalmazas, hogy pontosan milyen strukturaju stringeket keres (a min. 9 mire vonatkozik? csak a szamkarakterek mennyisege, vagy a teljes string elvalaszto karakterekkel?):
Értem.
Viszont nem dönthető el ez egyértelműen. A 10.20.15.2 lehet IP is, meg egy verziószám is.
IPv4 vagy IPv6 cím?
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
"Arra gondoltam valahogy szűrnöm kellene az IP 4-es formátumot"
"Normális ember már nem kommentel sehol." (c) Poli
Én perl-el szaladnék neki a dolognak, az IP::Net csomaggal
"A megoldásra kell koncentrálni nem a problémára."
2 greppel: grep -v IP ¦ grep JÓ. Ez gyorsabb is lehet, mint egy rosszul megírt regex.
Attol, hogy egy sorban van egy IP, attol fuggetlenul tartalmazhat meg szamokat is, ugyhogy nem dobhatod el az egesz sort.
Csak az IP címek kiszűrése: (Viszont ebben ilyen sorok is benne lesznek: 999192.168.1.255999 !!!)
Ezt meg lehet fordítani (-v -vel)... és ezt lehet arra a kritériumra szűrni, hogy minimum 6 karakteres, szököz is lehet benne, stb...
De szerintem ebben azt kellene első körben tisztázni, hogy mi számít IP címnek... Pontosabban mikor tudod eldönteni, hogy a szövegben nen IP cím van... :)
Debian Linux rulez... :D
RIP Ian Murdock
Ha máshogy nem megy, akkor ez segíthet: https://play.rust-lang.org/?version=stable&mode=release&edition=2018&gi…
Nincs valami szerkezete a log fájlnak? Pl. ha ilyesmi:
"IP cím: 1.1.1.1, kérések száma: 3"
és ebből csak a 3-ra vagy kíváncsi, akkor a szöveges részre is lehetne építeni.