Necesito editar el archivo guardado en una cadena usando sed. Según el siguiente ejemplo, quiero cambiar algún patrón en el archivo php.ini. El siguiente ejemplo solo permitirá cambiar lo que se guarda en la cadena.
[root@server ~]# PHPINI=/etc/php.ini [root@server ~]# sed "s/somepattern/changedpattern/" <<< "$PHPINI"
¿Alguien puede ayudar? Gracias por adelantado.
Está utilizando la sintaxis herestring que pasa una cadena en la entrada estándar. En su lugar, debe pasar el nombre del archivo como argumento:
sed 's/somepattern/changedpattern/' /etc/php.ini
Para sobrescribir el archivo existente, el método estándar es escribir en un archivo temporal y luego sobrescribir el original:
sed 's/somepattern/changedpattern/' /etc/php.ini > tmp && mv tmp /etc/php.ini
Algunas versiones de sed admiten la edición "in situ" (que hace más o menos lo mismo en segundo plano):
sed -i.bak 's/somepattern/changedpattern/' /etc/php.ini
Esto crea una copia de seguridad del archivo original con el sufijo .bak
.
Si el nombre del archivo está contenido dentro de una variable, simplemente utilícelo en su lugar
php_ini=/etc/php.ini sed -i.bak 's/somepattern/changedpattern/' "$php_ini"
Tenga en cuenta mi uso de nombres de variables en minúsculas. Las mayúsculas deben reservarse para que las use el shell.