¿Reemplazar texto especial con sed?

Estoy usando CMD en Windows Xp para reemplazar el texto especial con Sed. Estoy usando este comando para reemplazar caracteres especiales como $ or * :

 sed -i "s/\*/123/g;" 1.txt 

¡Pero cómo comando debo usar para reemplazar estas cadenas con ciao! En mis archivos de texto? ¿Es posible?

 \\ \\\ "" sed.exe -i "s/{\*)(//123/ sed -i "s/\\/123/g;" 1.txt 

El comando anterior no funciona porque tengo \ , " y otras cadenas especiales que sed utilizan para hacer regex.

Buscar cadenas literales con una expresión regular, cuando la cadena de búsqueda contiene caracteres especiales, a veces no es tan simple como buscar patrones, pero puede hacerlo con un poco de malabares.

Nota: El comando echo debe responder a CMD-caracteres especiales, por lo que necesita ^^ para escapar de un solo ^ y ^| Escapar | … No necesitas el carácter de escape de CMD ^ si escribes directamente en el archivo.


Paso 1: Cree un archivo, llamado literal-srch-strings.txt , que contenga la cadena exacta (inalterada) que se va a reemplazar. Hay 2 maneras de crear este archivo:

  1. Como comando emitido en la línea de comandos de CMD, o como un comando en un script de comando .cmd / .bat.

    echo sed -i^^/\\*$/$[{" ;"> literal-srch-strings.txt

  2. Haga literal-srch-strings.txt usted mismo, en su editor de texto.
    En este caso, no debes usar el carácter de escape CMD ^ , por lo que la línea tiene sólo un ^ , no ^^ – Esto se debe a que estás omitiendo el CMD-shell.
    Aquí está lo que se necesita en el archivo .txt (tal como dice el nombre de archivo 🙂

    sed -i^/\\*$/$[{" ;"


Paso 2: Realiza un script sed , llamado str-to-regex.sed , para convertir las cadenas en sed regex (s).
Tenga en cuenta que el mismo problema del CMD-escape-character ^ aplica a este paso, así que de nuevo, hay 2 maneras de crear el archivo .sed:

  1. Como comando:

    echo s/[]\/$*.^^^|[]/\\^&/g; s/.*/s\/^&\/Ciao!\/g/> str-to-regex.sed

  2. Usando su editor de texto, haga un archivo llamado str-to-regex.sed , que contenga:

    s/[]\/$*.^|[]/\\&/g; s/.*/s\/&\/Ciao!\/g/


Paso 3: Ejecute el sed-script que convierte la cadena en una expresión regeular sed, y
Envíe su salida a otro sed-script, replace-text.sed , que hará el reemplazo real.

 sed -f str-to-regex.sed literal-srch-strings.txt > replace-text.sed 

Paso 4: Ejecutar replace-text.sed – Para la prueba podemos utilizar literal-srch-strings.txt como el archivo de entrada, pero, por supuesto, puede utilizar cualquier archivo de entrada.

 sed -f replace-text.sed literal-srch-strings.txt 

Aquí está la salida:

 Ciao! 

Para anular el significado de los caracteres especiales en la línea de comandos (o las líneas de un archivo por lotes), escóndelos con el carácter ^ (quilate). Para introducir un carácter de quilate literal, utilice dos de ellos en una fila.