Tengo un archivo CSV que contiene algunos caracteres especiales y sus entidades HTML nombres

ex: htm.csv

À,À
Á,Á
Â,Â
Ã,Ã
É,É
Ê,Ê
Í,Í
Ó,Ó
Ô,Ô
Õ,Õ

y tengo un número de .php archivos donde estos caracteres especiales están presentes. He escrito un script de shell

#!/bin/bash
IFS=","
while read orig html
do
   for fl in *.php; do
   mv $fl $fl.old
   sed 's/'$orig'/'$html'/g' $fl.old > $fl
   done
done< "htm.csv"

pero el problema es cuando se utiliza el contenido de $html, es la impresión de los contenidos de $orig en lugar de "&".

InformationsquelleAutor Priya | 2011-06-01

3 Comentarios

  1. 5

    & es un carácter especial que significa «toda la cadena coincidente» en el s/// comando. Uso \&.

    • el uso de \\& su trabajo sino por un montón de archivo no su trabajo
    • para la documentación de que, vea aquí
    • «Para incluir un literal \, &, o la nueva línea en el final de reemplazo, asegúrese de preceder a la deseada \, &, o la nueva línea en la sustitución con un \.»
    • Tenga en cuenta que tiene sed para ver ‘\&‘. Usted tiene que conseguir que la barra invertida allá de la concha, lo que complica enormemente las cosas.
  2. 1

    Utilizar cualquier carácter como separador de comandos, aquí está un ejemplo:

    sed -Ei "s|$k|$j|g" filename.txt
  3. 0

    Además de los caracteres especiales puede hacer que los comandos un poco más seguro y más corto:

    • No hay necesidad de mv si su sed apoya -i (en lugar de reemplazo)
    • Para evitar el establecimiento de IFS para el resto de los comandos que se pueden limitar su alcance
    • Escapar & en $html

    El resultado:

    #!/bin/bash
    while IFS="," read orig html
    do
        for fl in *.php
        do
            sed -i 's/'$orig'/'${html//&/\&}'/g' "$fl"
        done
    done < "htm.csv"

    Favor de agregar un ejemplo si no funciona para usted. Podría haber otros caracteres especiales que tendría que ser escapado.

    • su muestra error

Dejar respuesta

Please enter your comment!
Please enter your name here