why this does not match..?

sed -e '/--Updated?[[:space:]]+Date/d' inputfile


--Updated Date: 2013-11-06 15:32:13

d? is because sometimes I have Update Date, and sometimes Updated Date.

for removal? I have tried with \s too, not working.


you need to use the -r parameter. try use

sed -r '/--Updated?[[:space:]]+Date/d' inputfile

updating answer

When you use sed '/something/d' , every line that match with this will be deleted.

-r - the parameter -r is use extended regular expressions .

Inside the expression have 2 regular expressions.

[[:space:]] - Match with all whitespace characters, including line breaks

? - optional

+ - one or more times.

SO, the command sed will delete every line that match with --updated and than one or more whitespace character and than Date but because of the ? the character d is optional. like:

--Updated Date: 2013-11-06 15:32:13
--Updated   Date: 2013-11-06 15:32:13
--Updated           Date: 2013-11-06 15:32:13
--Update Date: 2013-11-06 15:32:13
  • yes that was it. – branquito Mar 28 '14 at 15:18
  • Please explain your command.It would be helpful for noobs like me. – Avinash Raj Mar 28 '14 at 16:00

To do this using POSIX basic regex, the closest I can come is:

sed '/--Updated*[[:space:]][[:space:]]*Date/d' inputfile

Unfortunately there is no real substitute for ?, so a * is used which would also match multiple ds. The + however can be replaced by simply repeating the pattern an using a * for the second repetition.


Actually the way to get the equivalent effect of the extended expressions is to use two patterns:

sed \'
  ' inputfile
  • Is there any real benefit using this, or I am good with -r? I am using GNU sed, so I should be safe? – branquito Mar 28 '14 at 15:32
  • 1
    @branquito, if you are sure that GNU sed will always be used, then you will be fine to use the extended expressions. If you will run it on another system, eg on OSX, then the -r option may not be in the default sed. – Graeme Mar 28 '14 at 15:37
  • I think probably [d ]* would be a little more explicit, if not by much. It is definitely tricky. – mikeserv Mar 29 '14 at 0:32
  • @mikeserv, updated, just realised that the best way is just to use two patterns. – Graeme Mar 29 '14 at 0:50
  • This is true, but performance-wise ( if it can be counted in this case ) it does have a negative effect as sed now has two directives to check per line. Generally though, at least in my experience this is a non-issue, as sed is probably the fastest solution in any case that involves editing. Grep might be faster in this case though if you use -v. The only times i've been disappointed with sed is when ive had a choice between using it with two outs and the w directive or tee and two concurrent greps. The latter seems always to win out. – mikeserv Mar 29 '14 at 0:56

With gnu sed 4.2.2 on cygwin, add the -r flag:

 '--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'

prints no output. -r turns on extended regular expressions so ? and + will work like you expect. The reference for extended regular expressions I use most points out that ? and + have to have a leading backslash in basic regular expressions (the default) in order to have their special meaning.

  • I use the same reference, it's excellent. – branquito Mar 28 '14 at 15:27

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.