Blame view
syllabes.sh
2.47 KB
60e6b85f2 ajout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#!/bin/bash # Activer pour le debug #set -x function preRequis { for arg in $@; do if ! which $arg >/dev/null; then echo "La commande $arg n'est pas installée !!!" echo "Fin du script." exit 1 fi done } PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" preRequis egrep sed # Si le nombre d'arguments passé au script est inférieur à 1 # On quitte le script immédiatement. if [ $# -lt 1 ]; then echo "Usage: `basename $0` mot1 [mot2 mot3 ...]" exit 1 fi # Liste des voyelles VOY="aeiouyàâäéèêëîïôöùûü" # Liste des consonnes CONS="zrtpqsdfghjklmwxcvbnç" # Liste des groupes de lettres insécables GR="bl cl fl gl pl br cr dr fr gr pr tr vr ch ph gn th" for MOT in $@; do # On convertit toutes les majuscules en minuscules _MOT=$(tr "[A-Z]" "[a-z]" <<< "$MOT") # On exécute la première règle de découpe des syllabes # avec les groupes de lettres insécables. for _GR in $(echo $GR); do _MOT=$(sed "s/$_GR/-$_GR/g" <<< "$_MOT") done # Boucle infinie while :; do # Une consonne placée entre deux voyelles introduit une nouvelle syllabe. if SYL=$(grep -E -o "[$VOY]{1}[$CONS]{1}[$VOY]{1}" <<< "$_MOT"); then for __SYL in $SYL; do _SYL=$(sed -r "s/^(.)(.{2})$/\1-\2/" <<< "$__SYL") _MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT") done continue fi # Deux consonnes placées entre deux voyelles, # la première appartient à la syllabe précédente, # la seconde, à la syllabe suivante. if SYL=$(grep -E -o "[$VOY]{1}[$CONS]{2}[$VOY]{1}" <<< "$_MOT"); then for __SYL in $SYL; do _SYL=$(sed -r "s/^(.{2})(.{2})$/\1-\2/" <<< "$__SYL") _MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT") done continue fi # Quand il y a trois consonnes ou voyelles consécutives à l’intérieur d’un mot, # ordinairement les deux premières terminent une syllabe, # l’autre commence une nouvelle syllabe. if SYL=$(grep -E -o "[$CONS]{3}|[$VOY]{3}" <<< "$_MOT"); then for __SYL in $SYL; do _SYL=$(sed -r "s/^(.{2})(.)$/\1-\2/" <<< "$__SYL") _MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT") done continue fi # On quitte la boucle infinie si aucune des conditions précédentes n'est vraie break done # On corrige quelques erreurs _MOT=$(sed "s/^-//" <<< "$_MOT") _MOT=$(sed -r "s/^(.*)-([$VOY]{1})$/\1\2/" <<< "$_MOT") # On affiche le résultat echo -e "$MOT => $_MOT" done exit 0 |