matriculas - sed callejeros
sed: reemplaza parte de una lĂnea (7)
¿Cómo se puede reemplazar una parte de una línea con sed?
La línea
DBSERVERNAME xxx
debe ser reemplazado por:
DBSERVERNAME yyy
El valor xxx puede variar y hay dos pestañas entre dbservername y el valor. Este par nombre-valor es uno de muchos de un archivo de configuración.
Intenté con la siguiente referencia:
echo "DBSERVERNAME xxx" | sed -rne ''s//(dbservername/)[[:blank:]]+/([[:alpha:]]+/)//1 yyy/gip''
y eso dio como resultado un error: referencia no válida / 1 en el RHS del comando `s ''.
¿Qué pasa con la expresión? Usando GNU sed.
Estás escapando de tu (y). Estoy bastante seguro de que no necesitas hacer eso. Tratar:
sed -rne ''s/(dbservername)[[:blank:]]+/([[:alpha:]]+/)//1 yyy/gip''
Esto funciona:
sed -rne ''s/(dbservername)/s+/w+//1 yyy/gip''
(Cuando usa la opción -r, no tiene que escapar de los paréntesis).
Esto podría funcionar para usted:
echo "DBSERVERNAME xxx" | sed ''s//S*$/yyy/''
DBSERVERNAME yyy
No debería estar escapando cosas cuando usa comillas simples. es decir.
echo "DBSERVERNAME xxx" | sed -rne ''s/(dbservername[[:blank:]]+)([[:alpha:]]+)//1 yyy/gip''
No deberías escapar de tus parientes. Tratar:
echo "DBSERVERNAME xxx" | sed -rne ''s/(dbservername)[[:blank:]]+([[:alpha:]]+)//1 yyy/gip''
Otros ya han mencionado el escape de paréntesis, pero ¿por qué necesita una referencia posterior, si la primera parte de la línea es constante?
Simplemente podrías hacer
sed -e ''s/dbservername.*$/dbservername yyy/g''
Prueba esto
sed -re ''s/DBSERVERNAME[ /t]*([^/S]+)//yyy/ig'' temp.txt
o esto
awk ''{if($1=="DBSERVERNAME") $2 ="YYY"} {print $0;}'' temp.txt