¿Cómo reemplazar la línea en el archivo con el patrón con sed?

27

Estoy leyendo mucha documentación sobre sed, y todavía estoy perplejo con mi caso de uso particular.

Quiero reemplazar esta línea en un archivo conf con mi propia línea:

Reemplace esta línea:

#maxmemory <bytes>
con:
maxmemory 26gb

Esto es lo que probé:

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

Me sale el error:

sed: -e expresión # 1, char 30: comando 's' sin terminar

Lo que me desconcierta porque no sé lo que eso significa. Entonces mi pregunta es:

¿Cómo puedo lograr lo que quiero? ¿Qué significa ese error? (para que pueda aprender de eso)

Henley Chiu
fuente

Respuestas:

11

En efecto

El error significa que, en ausencia de comillas, su shell utiliza espacios para separar los argumentos. Por lo tanto, se considera que el espacio entre maxmemoryy 26gbtermina el primer argumento, que por lo tanto carece de terminal /cuando se sedtrata de analizar ese argumento como uno de sus comandos.

Poner su expresión regular entre comillas simples, para que su shell no lo divida en múltiples argumentos y lo entregue sedcomo un solo argumento, resuelve el problema:

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

mientras

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

trabajos.

Espero que ayude.

Sxilderik
fuente
1
No es sedeso lo que hace esto. Es el caparazón que hace esto.
JdeBP
tienes razón, por supuesto, gracias por el
aviso
3

Su caso de uso será resuelto por este comando.

sed -i -e 's/#maxmemory.*/maxmemory 26gb/g' /etc/redis/redis.conf
Velumani indio
fuente
55
Quizás quieras agregar una pequeña explicación.
davidbaumann
2
-se necesitaba para MacOS en mi caso
cancerbero