Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm reading a lot of documentation on sed, and am still stumped on my particular use case.

I want to replace this line in a conf file with my own line:

Replace this line:

#maxmemory <bytes>
with:
maxmemory 26gb

This is what I tried:

sed s/maxmemory.*bytes.*/maxmemory 26gb/ /etc/redis/redis.conf

I get the error:

sed: -e expression #1, char 30: unterminated `s' command

Which stumps me because I don't know what that means. So my question is:

How can I accomplish what I want? What does that error mean? (so I can learn from it)

share|improve this question

1 Answer 1

Indeed

The error means that in the absence of quotes, your shell uses spaces to separate arguments. The space between maxmemory and 26gb is thus considered as terminating the first argument, which thus lacks a terminal / when sed comes to parse that argument as one of its commands.

Putting your regex between single quotes, so that your shell doesn't split it into multiple arguments and hands it to sed as one single argument, solves the problem:

$ sed s/maxmemory.*/maxmemory 26gb/ /some/file/some/where.txt
sed: -e expression n°1, caractère 23: commande `s' inachevée

while

$ sed 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt

works.

Hope that helps.

share|improve this answer
1  
It's not sed that does this. It's the shell that does this. –  JdeBP Mar 2 at 2:08
    
you're right, of course, thanks for the heads up :) –  Sxilderik Mar 2 at 8:29

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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