sed - How to extract IP address using sed?

grep will be more suitable there (if you have sed, you should have grep too):

grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' messages

This is your own regex with no modification (tested OK)


If you have GNU sed, you could simply add the -r flag to use EREs:

sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file

Otherwise, you will need to escape certain characters:

sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' file

These characters include:

  • groups using parenthesis: (, )
  • occurrence braces: {, }
  • 'or' pipes: |
  • non-greedy question marks: ?

Generally (although not for your case) I use the following to match IP address:

sed -rn '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' file

Or in compatibility mode:

sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p' file

Tags:

Regex

Sed