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

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

我阅读了大量有关 sed 的文档,但仍然对我的特定用例感到困惑。

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

将此行替换为:

#maxmemory <字节数>
和:
最大内存 26GB

这是我尝试过的:

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

我收到错误:

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

这让我很困惑,因为我不知道这是什么意思。所以我的问题是:

我怎样才能实现我想要的?这个错误是什么意思?(这样我就可以从中吸取教训)

答案1

您忘记了 -i。应进行适当修改:

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

答案2

的确

这个错误意味着,如果没有引号,你的 shell 会使用空格来分隔参数。因此,maxmemory和之间的空格26gb被视为终止第一个参数,因此在将该参数解析为其命令之一/时,它缺少终止符。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

作品。

希望有所帮助。

答案3

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

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

相关内容