I'm trying to learn to use grep groups, like sed \1\2\3, but have a problem. For example I filtering /etc/services file to separate all ports. What I do:

~$ grep -E '[0-9]{1,5}/(tcp|udp)' /etc/services

and now I get 'port/protocol'. Next, I try separate it with groups:

~$ grep -E '\([0-9]{1,5}\)/(tcp|udp)' /etc/services

and haven't any effect. Well, trying non extended grep:

~$ grep '\([0-9]*\)/[tcp\|udp]\1' /etc/services

but results not right (/t or /u). So, how to use groups?

  • 1
    "...but results not right (/t or /u)" What output do you want, exactly? – steeldriver May 18 '15 at 11:30

You are referring to regex back-references.

Please check these two references:



And see the output of grep '\([0-9]\)\1' /etc/services which will give you a resultset of lines where a digit is directly followed by the same digit (the back reference \1).

| improve this answer | |
  • (...) would capture the characters specified inside of the parens and \1 would be used to reference the first match, this is a part of regex. and I think I trying do same – conformist May 18 '15 at 9:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.