Los siguientes funcionan en Javascript como una coincidencia:

[^\$]fileref.*

Sin embargo, en sed, la expresión regular no coincide con nada. Me gustaría reemplazar una referencia de variable en un archivo bash ignorando el identificador de variable. La premisa es que tengo un archivo de marcador de posición predeterminado que debe actualizarse desde un script de shell con sed -i. No puedo ubicar una razón de por qué sed tiene un problema con esta expresión.

Ejemplo de prueba Sed:

echo -e 'fileref=old\n./executable $fileref' | sed 's/[^\$]fileref.*/fileref=replaced/g'

Salida de gnu sed (ubuntu o centOS) donde no se encuentra ninguna coincidencia:

fileref=old
./executable $fileref

Salida deseada:

fileref=replaced
./executable $fileref
0
acub 23 jul. 2016 a las 00:21

2 respuestas

La mejor respuesta

"No $ antes fileref" puede expresarse así: "un carácter que no es un $ o ningún carácter antes { {X3}} "

echo -e 'fileref=old\n./executable $fileref' | sed 's/\([^$]\|^\)fileref.*/\1fileref=replaced/g'

Lo mismo con Javascript:

var result = str.replace(/([^$]|^)fileref.*/, '$1fileref=replaced');
2
Casimir et Hippolyte 22 jul. 2016 a las 21:49
echo -e 'fileref=old\n./executable $fileref' | sed 's/^fileref.*$/fileref=replaced/g'

Da lo siguiente

fileref=replaced
./executable $fileref

Al ingresar [^ \ $], estás diciendo que busques $ al comienzo de una línea

0
Anthony Staunton 22 jul. 2016 a las 21:32