-1

How can I make regex to search for ipv4 address only. when I am doing

grep -E '([0-9]\.){1,3}[0-9]\b filename

It is showing group with five octets also.

Wiktor Stribiżew
  • 561,645
  • 34
  • 376
  • 476
Nikhil
  • 11

1 Answers1

0

I doubt it can be done with a POSIX regex, thus I'd rather suggest a PCRE solution:

grep -P '(?<!\d\.|\d)\d{1,3}(?:\.\d{1,3}){3}(?!\.?\d)' filename

The pattern matches

  • (?<!\d\.|\d) - a location that is not immediately preceded with a digit and a dot or just a digit
  • \d{1,3} - 1 to 3 digits
  • (?:\.\d{1,3}){3} - three occurrences of
    • \. - a dot
    • \d{1,3} - 1 to 3 digits
  • (?!\.?\d) - a location that is not immediately followed with an optional dot and then a digit.

To make the pattern a bit more precises, replace the octet pattern (\d{1,3}) with (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).

Wiktor Stribiżew
  • 561,645
  • 34
  • 376
  • 476