Você esqueceu -i. A modificação deve ser feita no local:
$ sed -i 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt
Estou lendo muita documentação sobre sed e ainda estou perplexo em meu caso de uso específico.
Eu quero substituir esta linha em um arquivo conf com minha própria linha:
Substitua esta linha:
#maxmemory <bytes>com:
maxmemory 26gb
Isso é o que eu tentei:
sed s/maxmemory.*bytes.*/maxmemory 26gb/ /etc/redis/redis.conf
Eu recebo o erro:
sed: -e expression #1, char 30: unterminated 's' command
O que me incomoda porque não sei o que isso significa. Então minha pergunta é:
Como posso realizar o que quero? O que esse erro significa? (então eu posso aprender com isso)
Você esqueceu -i. A modificação deve ser feita no local:
$ sed -i 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt
De fato
O erro significa que, na ausência de aspas, seu shell usa espaços para separar argumentos. O espaço entre maxmemory
e 26gb
é, portanto, considerado como terminando o primeiro argumento, que, portanto, não possui um terminal /
quando sed
trata de analisar esse argumento como um de seus comandos.
Colocando o seu regex entre aspas simples, para que seu shell não o divida em vários argumentos e o entregue a sed
como um único argumento, resolve o problema:
$ sed s/maxmemory.*/maxmemory 26gb/ /some/file/some/where.txt
sed: -e expression n°1, caractère 23: commande 's' inachevée
enquanto
$ sed 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt
funciona.
Espero que ajude.
Tags command-line bash regex sed linux