¿Cómo sustituir vocales acentuadas en documentos HTML con SED ?
   
Linux Solutions Center    
Bienvenido a    :: LINUX SOLUTIONS CENTER ::
México, 
Home Manuales ¿Cómo sustituir vocales acentuadas en documentos HTML con SED ?
Linux Solutions C.
Buscar en Linuxsc
Actualidad
GNU/Linux
Gente en Línea
Tenemos 111 invitados conectado(s)
Acceso



Estadísticas
Ver contenido por hits : 1058377
El Clima
Mie Jue Vie
La encuesta del día
¿Cuál es la Red Social que usas más?
 
Anunciate aquí

Centro de Soluciones Linux

Santa Clara Ocoyucan

KoalaSoft-Sitio de Amigos
Computer Fixers



¿Cómo sustituir vocales acentuadas en documentos HTML con SED ? PDF Imprimir E-mail Hits: 826
Viernes, 25 de Septiembre de 2009 08:49

Hay ocaciones en que uno suele escribir documentos HTML en diferentes tipos de editores tales como:  kwrite, quanta, nano, pico o vi. Pero la cuestion no es la redacción de la misma, si no en la revisión de los diferentes caracteres especiales como las vocales acentuadas las "ñ"s, etc.

En virtud de que el documento deberá de estar bien editado en cuanto a la sintaxis y en sus correspondientes codigos html como lo son las vocales, es decir:
á > á
é > é
í > í
ó > ó
ú > ú
Á > Á
...
el sustituirlas a manos es un gran trabajo, para ello hecharemos mano del comando SED.


Por ejemplo si se requiere cambiar el archivo que contenga las vocales acentudas ejecutaremos el siguiente comando largo:

cat acentos.txt | sed -e 's/á/á/' \
-e 's/é/é/' \
-e 's/í/í/' \
-e 's/ó/ó/' \
-e 's/ú/ú/' >
acentos2.txt

Pero aqui existe un pequeño problema, ya que al ejecutar el comando anterior daria como resultado: áaacute; éeacute; íiacute; óoacute; úuacute;

Aquie en vez de sustituir el texto, el problema radica en el caracter "&",para solucionar este problema en bash el "&" es un caracter especial. Para que se ejecute sin tener en cuenta esa "especialidad", basta con precederlo con una barra oblicua "\&". Además, en la anterior pseudo-solución se me había olvidado añadir "g" a cada sustitución. En fin, la solución definitiva es ésta:

cat acentos.txt | sed -e 's/á/\á/g' \
-e 's/é/\é/g' \
-e 's/í/\í/g' \
-e 's/ó/\ó/g' \
-e 's/ú/\ú/g' \
-e 's/ñ/\ñ/g' \
-e 's/Á/\Á/g' \
-e 's/É/\É/g' \
-e 's/Í/\Í/g' \
-e 's/Ó/\Ó/g' \
-e 's/Ú/\Ú/g' \
-e 's/Ñ/\Ñ/g' > acentos2.txt

 

Ponerlo en un pequeño shell script seria

#!/bin/bash
archivo=$1
cat $archivo | sed -e 's/á/\á/g' \
-e 's/é/\é/g' \
-e 's/í/\í/g' \
-e 's/ó/\ó/g' \
-e 's/ú/\ú/g' \
-e 's/ñ/\ñ/g' \
-e 's/Á/\Á/g' \
-e 's/É/\É/g' \
-e 's/Í/\Í/g' \
-e 's/Ó/\Ó/g' \
-e 's/Ú/\Ú/g' \
-e 's/Ñ/\Ñ/g' > ${archivo}.txt


Guardamos el archivo como "acentos.sh", nos aseguramos de que es ejecutable, y el uso es muy sencillo: si el archivo en el que queremos hacer la sustitución se llama "archivo.txt", tecleamos lo siguiente:

./acentos.sh archivo.txt

Y nos creará un archivo de salida con nombre "archivo.txt".

  • Una variante del script: ahora si tecleamos "acentos archivo.html", primero creará una copia de seguridad del archivo de nombre "archivo.html.bak", luego realizará los cambios en dicho archivo, y guardará los cambios de nuevo en el archivo "archivo.html". De esta manera el archivo modificado resultante tendrá el mismo nombre que el original (con lo cual no hay que tomarse la molestia de andar cambiando la extensión al archivo), y se habrá creado un archivo de respaldo de extensión .bak, por si acaso. Ah, de paso también he añadido unos cuantos caracteres especiales más. El código es el siguiente:


#!/bin/bash
archivo=$1
cp $archivo ${archivo}.bak && cat ${archivo}.bak | sed -e 's/á/\á/g' \
-e 's/é/\é/g' \
-e 's/í/\í/g'  \
-e 's/ó/\ó/g' \
-e 's/ú/\ú/g' \
-e 's/ñ/\ñ/g' \
-e 's/Á/\Á/g' \
-e 's/É/\É/g' \
-e 's/Í/\Í/g' \
-e 's/Ó/\Ó/g' \
-e 's/Ú/\Ú/g' \
-e 's/Ñ/\Ñ/g' \
-e 's/©/\©/g' \
-e 's/¡/\¡/g' \
-e 's/§/\§/g' \
-e 's/ª/\ª/g' \
-e 's/«/\«/g' \
-e 's/®/\®/g' \
-e 's/±/\±/g' \
-e 's/²/\²/g' \
-e 's/³/\³/g' \
-e 's/¶/\¶/g' \
-e 's/º/\º/g' \
-e 's/»/\»/g' \
-e 's/¿/\¿/g' \
-e 's/Æ/\Æ/g' \
-e 's/Ç/\Ç/g' \
-e 's/æ/\æ/g' \
-e 's/ç/\ç/g' \
-e 's/Ü/\Ü/g' \
-e 's/ü/\ü/g' > $archivo




Finalmente, se ha creado un shell script de manera muy general para todos los archivos con caracteres y/o vocales acentuadas.

Ejemplo:
acentos archivo1.html archivo2.html

#!/bin/bash
if [ "--help" = "$1" ] || [ "0" = "$#" ]
then
echo
echo "Uso:"
echo " acentos < archivo1 archivo2 ... archivoN >"
echo
exit 0
fi

until [ -z "$1" ]
do
archivo="$1"
if [ -f $archivo ]
then
cp $archivo ${archivo}.bak
cat ${archivo}.bak | sed -e 's/á/\&aacute;/g' \
-e 's/é/\&eacute;/g' \
-e 's/í/\&iacute;/g' \
-e 's/ó/\&oacute;/g' \
-e 's/ú/\&uacute;/g' \
-e 's/ñ/\&ntilde;/g' \
-e 's/Á/\&Aacute;/g' \
-e 's/É/\&Eacute;/g' \
-e 's/Í/\&Iacute;/g' \
-e 's/Ó/\&Oacute;/g' \
-e 's/Ú/\&Uacute;/g' \
-e 's/Ñ/\&Ntilde;/g' \
-e 's/©/\&copy;/g' \
-e 's/¡/\&iexcl;/g' \
-e 's/§/\&sect;/g' \
-e 's/ª/\&ordf;/g' \
-e 's/«/\&laquo;/g' \
-e 's/®/\&reg;/g' \
-e 's/±/\&plusmn;/g' \
-e 's/²/\&sup2;/g' \
-e 's/³/\&sup3;/g' \
-e 's/¶/\&para;/g' \
-e 's/º/\&ordm;/g' \
-e 's/»/\&raquo;/g' \
-e 's/¿/\&iquest;/g' \
-e 's/Æ/\&AElig;/g' \
-e 's/Ç/\&Ccedil;/g' \
-e 's/æ/\&aelig;/g' \
-e 's/ç/\&ccedil;/g' \
-e 's/Ü/\&Uuml;/g' \
-e 's/ü/\&uuml;/g' > $archivo
else
if [ -d $archivo ]
then
echo "$archivo: Es un directorio"
else
echo "$archivo: Archivo no existente"
fi
fi
shift
done

Más informacion en : Advanced Bash-Scripting Guide.

Última actualización el Lunes, 21 de Diciembre de 2009 20:22
 








Chinese (T)EnglishGermanGreekKoreanPolishPortugueseSpanish
Linuxsc está disponible ahora.
Linuxsc en Android
QrDroid

Descarga el APK de Linuxsc
Linuxsc RSS.

Tu Futuro... Hoy
Felipe Angeles
Linuxsc en RSS
No. de Visitas
mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy1066
mod_vvisit_counterAyer1587
mod_vvisit_counterEsta Semana4237
mod_vvisit_counterEste Mes12214
mod_vvisit_counterTotal1021239
News Feeds

Ultimo Reporte
Ranking Linux
http://www.wikio.es