tipos reglas que monosilabos enfatico ejemplos diacriticos diacritico cuadro caracteristicas acento bash sed replace

bash - que - reglas del acento diacritico



¿Cómo eliminar todos los signos diacríticos de un archivo? (8)

Esto podría funcionar para usted:

sed -i ''y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'' file

Tengo un archivo que contiene muchas vocales con signos diacríticos. Necesito hacer estos reemplazos:

  • Reemplace ā, á, ǎ, y à con a.
  • Reemplace ē, é, ě, y è con e.
  • Reemplace ī, í, ǐ, y ì con i.
  • Reemplace ō, ó, ǒ, y ò con o.
  • Reemplace ū, ú, ǔ, y ù con u.
  • Reemplace ǖ, ǘ, ǚ, y ǜ con ü.
  • Reemplace Ā, Á, Ǎ, y À con A.
  • Reemplace Ē, É, Ě, y È con E.
  • Reemplace Ī, Í, Ǐ, y Ì con I.
  • Reemplace Ō, Ó, Ǒ, y Ò con O.
  • Reemplace Ū, Ú, Ǔ, y Ù con U.
  • Reemplace Ǖ, Ǘ, Ǚ, y Ǜ con Ü.

Sé que puedo reemplazarlos uno a la vez con esto:

sed -i ''s/ā/a/g'' ./file.txt

¿Hay alguna manera más eficiente de reemplazar todos estos?


Esto puede no funcionar. ¡Solo porque tu locale debe estar configurado!

use la configuración regional para establecer LC_ALL, por ejemplo:

export LC_ALL=en_US.iso88591

Tenga en cuenta que la lista completa de configuraciones regionales está disponible a través de:

locale -a


Me gusta iconv ya que maneja todas las variaciones de acentos:

cat non-ascii.txt | iconv -f utf8 -t ascii//TRANSLIT//IGNORE > ascii.txt


Para esto, el comando tr (1) es para. Por ejemplo:

tr ''āáǎàēéěèīíǐì...'' ''aaaaeeeeiii...'' <infile >outfile

Puede que tenga que verificar / cambiar su variable de entorno LANG para que coincida con el conjunto de caracteres que se utiliza.


Puede usar man iso_8859_1 (o su conjunto de caracteres) o od -bc para identificar la representación octal del signo diacrítico. Entonces usa gawk para hacer el reemplazo.

{ gsub(//344/,"a"; print $0 }

Esto reemplaza ä con a .


Puedes usar algo como esto:

sed -e ''s/[àâ]/a/g;s/[ọõ]/o/g;s/[í,ì]/i/g;s/[ê,ệ]/e/g''

simplemente agregue más caracteres a [..] para su necesidad.


Si revisa la página del manual de la herramienta iconv :

// TRANSLIT
Cuando la cadena "// TRANSLIT" se adjunta a --to-code, la transliteración se activa. Esto significa que cuando un personaje no puede ser representado en el juego de caracteres objetivo, puede ser aproximado a través de uno o varios personajes de aspecto similar.

entonces podríamos hacer:

kent$ cat test1 Replace ā, á, ǎ, and à with a. Replace ē, é, ě, and è with e. Replace ī, í, ǐ, and ì with i. Replace ō, ó, ǒ, and ò with o. Replace ū, ú, ǔ, and ù with u. Replace ǖ, ǘ, ǚ, and ǜ with ü. Replace Ā, Á, Ǎ, and À with A. Replace Ē, É, Ě, and È with E. Replace Ī, Í, Ǐ, and Ì with I. Replace Ō, Ó, Ǒ, and Ò with O. Replace Ū, Ú, Ǔ, and Ù with U. Replace Ǖ, Ǘ, Ǚ, and Ǜ with Ü. kent$ iconv -f utf8 -t ascii//TRANSLIT test1 Replace a, a, a, and a with a. Replace e, e, e, and e with e. Replace i, i, i, and i with i. Replace o, o, o, and o with o. Replace u, u, u, and u with u. Replace u, u, u, and u with u. Replace A, A, A, and A with A. Replace E, E, E, and E with E. Replace I, I, I, and I with I. Replace O, O, O, and O with O. Replace U, U, U, and U with U. Replace U, U, U, and U with U.


Si usted, como yo, necesita reemplazar los acentos solo en algunos lugares especiales del texto de su archivo, puede hacerlo utilizando este tipo de expresiones regulares.

echo ''{"doNotReplaceKey":"bábögêjírù","replaceValueKey":"bábögêjírù","anotherNotReplaceKey":"bábögêjírù"}'' / | sed -e '':a;s/replaceValueKey":"/([a-zA-Z0-9 -_]*/)[áâàãä]/replaceValueKey":"/1a/g;ta'' / | sed -e '':a;s/replaceValueKey":"/([a-zA-Z0-9 -_]*/)[éêèë]/replaceValueKey":"/1e/g;ta'' / | sed -e '':a;s/replaceValueKey":"/([a-zA-Z0-9 -_]*/)[íîìï]/replaceValueKey":"/1i/g;ta'' / | sed -e '':a;s/replaceValueKey":"/([a-zA-Z0-9 -_]*/)[óôòõö]/replaceValueKey":"/1o/g;ta'' / | sed -e '':a;s/replaceValueKey":"/([a-zA-Z0-9 -_]*/)[úûùü]/replaceValueKey":"/1u/g;ta''

Salida

{"doNotReplaceKey":"bábögêjírù","replaceValueKey":"babogejiru","anotherNotReplaceKey":"bábögêjírù"}