Estoy usando sed para buscar y reemplazar patrones dentro de los archivos SAS que tengo en lugar de cambiarlos individualmente. El problema es que estoy tratando de reemplazar variables macro y cuando uso los ampers y no se procesa correctamente.
Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas
cada vez que ejecuto este comando parece agregar y hacer todo tipo de cosas funky con el texto original.
Pregunta: ¿Cómo reemplazo el texto que contiene símbolos con comando sed?

&es un personaje especial, por lo que debe escaparse cuando se usa en el RHS; en su caso, debe correr,'s/user=&uid./user=\&sysuserid./g'aunque sospecho que también necesita escapar del punto en el LHS para que coincida con un punto literal, por lo que realmente necesita's/user=&uid\./user=\&sysuserid./g'Respuestas:
&es especial en el texto de reemplazo: significa “toda la parte de la entrada que se corresponde con el patrón”, así que lo que estás haciendo aquí reemplazauser=&uidXconuser=user=&uidXsysuserid.. Para insertar un ampersand real en el texto de reemplazo, use\&.Otra cosa que parece incorrecta es que
.en el patrón de búsqueda se encuentra cualquier carácter (excepto una nueva línea), pero.al final del texto de reemplazo hay un punto literal. Si desea reemplazar solo la cadena literaluser=&uid., protéjala.con una barra diagonal inversa.Si desea reemplazar cualquier carácter y preservarlo en el resultado, coloque el carácter en un grupo y úselo
\1en el reemplazo para referirse a ese grupo.De hecho, dada la repetición entre el texto original y el reemplazo, debería usar grupos de todos modos:
es decir, "reemplazar
uporsysuserentreuser=&yid.".fuente
\(user=&\)es un patrón que coincideuser&y almacena la cadena de coincidencia como un grupo (grupo número 1 ya que es el primer grupo en el patrón). Luego, en el reemplazo\1se reemplaza por la cadena almacenada para el grupo número 1.=en las expresiones regulares y en el texto de reemplazo se representa a sí mismo, por lo queuser=&solo coincideuser=&, yuser=&en el texto de reemplazo se obtieneuser=la parte de la línea que coincide con la expresión regular.=personaje no tiene ningún significado especial.user=&en el texto de reemplazo produceuser=seguido por el texto original coincidente.user=\&en el texto de reemplazo produceuser=&