我阅读了大量有关 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