如何用sed模式替换文件中的行?


27

我正在阅读有关sed的许多文档,但仍然对我的特定用例感到困惑。

我想用自己的一行替换conf文件中的这一行:

替换此行:

#maxmemory <字节>
与:
最大内存26gb

这是我尝试的:

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

我得到错误:

sed:-e表达式#1,字符30:未终止的s命令

这让我感到难过,因为我不知道那意味着什么。所以我的问题是:

我该如何完成我想要的?该错误是什么意思?(所以我可以从中学到)

Answers:



11

确实

该错误意味着在没有引号的情况下,您的外壳使用空格分隔参数。之间的空间maxmemory26gb因此被认为是终止所述第一参数,它因而缺乏一个终端/sed来解析参数作为命令之一。

将您的正则表达式放在单引号之间,以使您的shell不会将其拆分为多个参数并将其sed作为一个参数传递,即可解决此问题:

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

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

作品。

希望能有所帮助。


1
不是sed这样做。这是外壳程序执行的。
JdeBP 2014年

您是对的,当然,感谢您的注意:)
Sxilderik 2014年

3

您的用例将通过此命令解决。

sed -i -e 's/#maxmemory.*/maxmemory 26gb/g' /etc/redis/redis.conf

5
也许您想添加一个小的解释。
davidbaumann

2
在我的情况下,MacOS需要使用-e
Cancerbero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.