Je lis beaucoup de documentation sur sed et suis toujours perplexe sur mon cas d'utilisation particulier.
Je veux remplacer cette ligne dans un fichier de conf par ma propre ligne:
Remplacez cette ligne:
#maxmemory <octets>
maxememory 26gb
C'est ce que j'ai essayé:
sed s/maxmemory. * octets. */maxmemory 26gb//etc/redis/redis.conf
Je reçois l'erreur:
sed: -e expression # 1, char 30: commande `s 'sans fin
Ce qui me stoppe parce que je ne sais pas ce que cela signifie. Donc ma question est:
Comment puis-je accomplir ce que je veux? Qu'est-ce que cette erreur signifie? (pour que je puisse en tirer des leçons)
Vous avez oublié -i. Les modifications doivent être effectuées sur place:
$ sed -i 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt
Effectivement
L'erreur signifie qu'en l'absence de guillemets, votre shell utilise des espaces pour séparer les arguments. L'espace entre maxmemory
et 26gb
est donc considéré comme terminant le premier argument, auquel manque donc un terminal /
lorsque sed
vient analyser cet argument comme l'une de ses commandes.
Placer votre expression rationnelle entre guillemets simples, de sorte que votre shell ne la divise pas en plusieurs arguments et ne le transmet pas à sed
sous la forme d'un seul argument, résout le problème:
$ sed s/maxmemory.*/maxmemory 26gb/ /some/file/some/where.txt
sed: -e expression n°1, caractère 23: commande `s' inachevée
tandis que
$ sed 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt
travaux.
J'espère que cela pourra aider.
Votre cas d'utilisation sera résolu par cette commande.
sed -i -e 's/#maxmemory.*/maxmemory 26gb/g' /etc/redis/redis.conf