
Dado un archivo con la siguiente cadena:
fastcgi_param WP_ENV staging;
Necesito una expresión sed que reemplace la palabra 'puesta en escena' con una nueva cadena:
fastcgi_param WP_ENV production;
En el primer ejemplo, la tercera palabra es variable. Podría ser cualquier cadena en minúscula, por ejemplo, desarrollo, local, etc.
Intenté lo siguiente:
sed 's/fastcgi_param WP_ENV [\w+]/fastcgi_param WP_ENV production/g'
pero no retoma el trabajo correctamente. La expresión regular de la palabra no coincide.
¿Cuál sería el comando sed correcto para realizar este tipo de reemplazo?
Respuesta1
Agregue -E
y elimine los corchetes:
$ sed -E 's/fastcgi_param WP_ENV \w+/fastcgi_param WP_ENV production/g' file
fastcgi_param WP_ENV production;
Notas:
+
no es compatible con expresiones regulares básicas.-E
activa expresiones regulares extendidas que sí admiten+
.\w+
coincide con uno o más caracteres de palabra.[\w+]
coincide con cualquiera de\
,w
, o+
.\w
no es portátil. Para compatibilidad con POSIX, utilice:$ sed -E 's/fastcgi_param WP_ENV [[:alnum:]]+/fastcgi_param WP_ENV production/g' file fastcgi_param WP_ENV production;
Puede evitar la doble escritura de la línea utilizando un grupo de captura:
$ sed -E 's/(fastcgi_param WP_ENV) [[:alnum:]]+/\1 production/g' file fastcgi_param WP_ENV production;
Respuesta2
Hacer:
sed -E 's/^(([^[:blank:]]+[[:blank:]]+){2})[[:lower:]]+(.*)/\1production\3/'
^(([^[:blank:]]+[[:blank:]]+){2})
coincide con las dos primeras palabras y las coloca en el grupo capturado para que podamos referir el grupo en el reemplazo[[:lower:]]+
coincide con uno o más caracteres en minúscula(.*)
coincide con la parte restante de la línea y se coloca en el grupo capturadoEn el reemplazo hemos mantenido el grupo capturado, 1 (las dos primeras palabras con espacios en blanco al final) y 3 (la parte después de las minúsculas que se desea reemplazar). Entre estos, se proporciona la cadena de reemplazo deseada.
Ejemplo:
% sed -E 's/^(([^[:blank:]]+[[:blank:]]+){2})[[:lower:]]+(.*)/\1production\3/' <<<'fastcgi_param WP_ENV staging;'
fastcgi_param WP_ENV production;