How to replace line in file with pattern with sed?
Solution 1
You have forgot -i. Modification should be made in place :
$ sed -i 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt
Solution 2
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.
Solution 3
Your use case will be solved by this command.
sed -i -e 's/#maxmemory.*/maxmemory 26gb/g' /etc/redis/redis.conf
Related videos on Youtube
Comments
-
Henley over 1 year
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)
-
JdeBP about 10 yearsIt's not
sed
that does this. It's the shell that does this. -
Sxilderik about 10 yearsyou're right, of course, thanks for the heads up :)
-
davidbaumann about 5 yearsMaybe you want to add a small explanation.
-
cancerbero over 4 years-e was needed for MacOS in my case
-
Gabriel Staples about 4 yearsAnd if you have slashes in your strings, you must use another delimiter character instead of
/
, such as@
or|
. See here: stackoverflow.com/a/9366940/4561887 and here: unix.stackexchange.com/a/259087/114401. -
f4f over 3 yearsConcise and precisely what one will typically need. Thanks a lot, @Phantom.