Aller au contenu | Aller au menu | Aller à la recherche


Remplacer les caractères spéciaux et accentuées dans un script bash.sh

Afin de nommer correctement mes branches git, j'ai du remplacer les caractères spéciaux et accentuées à travers un script bash.sh sous le git bash windows.

Voici le script qui :

  • transforme les lettres accentuées en lettres sans accent
  • transforme tout ce qui n'est pas alphanumérique 0-9A-Za-z en -
  • remplace les multi - en un seul -
#!/bin/bash

str1="©«°»¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜ_ok ! | [et] {la} (suite) \/ éèèë fonctionne ^1.2,3€^ ?..."
echo $str1

str2=$(sed \
-e s/[\\xc2\\x80\-\\xc2\\xbf]/-/g \
-e s/[\\xc3\\x80\-\\xc3\\x86]/A/g \
-e s/[\\xc3\\x87]/C/g \
-e s/[\\xc3\\x88\-\\xc3\\x8b]/E/g \
-e s/[\\xc3\\x8c\-\\xc3\\x8f]/I/g \
-e s/[\\xc3\\x90\-\\xc3\\x91]/-/g \
-e s/[\\xc3\\x92\-\\xc3\\x98]/O/g \
-e s/[\\xc3\\x99\-\\xc3\\x9c]/U/g \
-e s/[\\xc3\\x9d\-\\xc3\\x9f]/-/g \
-e s/[\\xc3\\xa0\-\\xc3\\xa6]/a/g \
-e s/[\\xc3\\xa7]/c/g \
-e s/[\\xc3\\xa8\-\\xc3\\xab]/e/g \
-e s/[\\xc3\\xac\-\\xc3\\xaf]/i/g \
-e s/[\\xc3\\xb0]/-/g \
-e s/[\\xc3\\xb1]/n/g \
-e s/[\\xc3\\xb2\-\\xc3\\xb8]/o/g \
-e s/[\\xc3\\xb9\-\\xc3\\xbc]/u/g \
-e s/[\\xc3\\xbd\-\\xc3\\xbf]/-/g \
<<< $str1)
echo $str2

str3=$(sed "s/[^[:alnum:]-]/-/g" <<< $str2)
echo $str3

str4=$(sed -e "s/--*/-/g" <<< $str3)
echo $str4
©«°»¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜ_ok ! | [et] {la} (suite) \/ éèèë fonctionne ^1.2,3€^ ?...
-----AAAAAAACEEEEIIII--OOOOOOOUUUU_ok ! | [et] {la} (suite) \/ eeee fonctionne ^1.2,3€^ ?...
-----AAAAAAACEEEEIIII--OOOOOOOUUUU-ok------et---la---suite-----eeee-fonctionne--1-2-3-------
-AAAAAAACEEEEIIII-OOOOOOOUUUU-ok-et-la-suite-eeee-fonctionne-1-2-3-

Mais il manque aussi les caractères HTML, qu'il faut decode html entities :

Mais sans langage externe, comment convertir et décoder les caractères HTML ? Par défaut, notre git bash, n'a pas : recode, w3m

Solved-Bash script to convert from HTML entities to characters-bash

A sed script based on the list of entities so it must handle most of the entities. SED Commands to replace HTML entities to characters

sed -f htmlentities.sed < file.html
# ASCII printable characters
s/&#32;/ /g
s/&#33;/!/g
s/&#34;/"/g
s/&#35;/#/g
s/&#36;/$/g
s/&#37;/%/g
s/&#39;/'/g
s/&#40;/(/g
s/&#41;/)/g

# ISO-8859-1 characters
s/&Agrave;/À/g
s/&#192;/À/g

s/&agrave;/à/g
s/&#224;/à/g

Replacing HTML ascii codes via a bash script?

An alternative is to pipe through a web browser, such as:

echo '&#33;' | w3m -dump -T text/html

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet