141 lines
4.2 KiB
Bash
141 lines
4.2 KiB
Bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||
##@cooked nocomments
|
||
module: base.str "Fonctions de base: gestion des valeurs chaines"
|
||
|
||
function: strmid "Afficher la plage \$1 de la valeur \$2..*
|
||
|
||
La plage peut être d'une des formes 'start', '[start]:length'. Si start est
|
||
négatif, le compte est effectué à partir de la fin de la chaine. Si length est
|
||
négatif, il est rajouté à la longueur de la chaine à partir de start"
|
||
function strmid() {
|
||
local range="$1"; shift
|
||
local str="$*"
|
||
if [[ "$range" == *:-* ]]; then
|
||
local max=${#str}
|
||
[ $max -eq 0 ] && return
|
||
local start="${range%%:*}"
|
||
[ -n "$start" ] || start=0
|
||
while [ "$start" -lt 0 ]; do
|
||
start=$(($max$start))
|
||
done
|
||
max=$(($max-$start))
|
||
local length="${range#*:}"
|
||
while [ "$length" -lt 0 ]; do
|
||
length=$(($max$length))
|
||
done
|
||
range="$start:$length"
|
||
fi
|
||
eval 'echo "${str:'" $range"'}"'
|
||
}
|
||
|
||
function: strrepl "Remplacer dans la valeur \$3..* le motif \$1 par la chaine \$2
|
||
|
||
\$1 peut commencer par l'un des caractères /, #, % pour indiquer le type de recherche"
|
||
function strrepl() {
|
||
local pattern="$1"; shift
|
||
local repl="$1"; shift
|
||
local str="$*"
|
||
local cmd='echo "${str/'
|
||
if [ "${pattern#/}" != "$pattern" ]; then
|
||
pattern="${pattern#/}"
|
||
cmd="$cmd/"
|
||
elif [ "${pattern#\#}" != "$pattern" ]; then
|
||
pattern="${pattern#\#}"
|
||
cmd="$cmd#"
|
||
elif [ "${pattern#%}" != "$pattern" ]; then
|
||
pattern="${pattern#%}"
|
||
cmd="$cmd%"
|
||
fi
|
||
cmd="$cmd"'$pattern/$repl}"'
|
||
eval "$cmd"
|
||
}
|
||
|
||
function: strlcomp "transformer dans le flux en entrée en UTF-8 certains caractères en leur équivalent transformable en latin1.
|
||
|
||
si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée."
|
||
function strlcomp() {
|
||
if [ $# -gt 0 ]; then strlcomp <<<"$*"
|
||
else LANG=fr_FR.UTF-8 sed $'
|
||
s/[\xE2\x80\x90\xE2\x80\x91\xE2\x80\x92\xE2\x80\x93\xE2\x80\x94\xE2\x80\x95]/-/g
|
||
s/[‘’]/\x27/g
|
||
s/[«»“”]/"/g
|
||
s/[\xC2\xA0\xE2\x80\x87\xE2\x80\xAF\xE2\x81\xA0]/ /g
|
||
s/[\xE2\x80\xA6]/.../g
|
||
s/[œ]/oe/g
|
||
s/[Œ]/OE/g
|
||
s/[æ]/ae/g
|
||
s/[Æ]/AE/g
|
||
s/a\xCC\x80/à/g
|
||
s/e\xCC\x81/é/g; s/e\xCC\x80/è/g; s/e\xCC\x82/ê/g; s/e\xCC\x88/ë/g
|
||
s/i\xCC\x88/ï/g; s/i\xCC\x82/î/g
|
||
s/o\xCC\x82/ô/g; s/o\xCC\x88/ö/g
|
||
s/u\xCC\x88/ü/g; s/u\xCC\x82/û/g
|
||
s/c\xCC\xA7/ç/g
|
||
s/A\xCC\x80/À/g
|
||
s/E\xCC\x81/É/g; s/E\xCC\x80/È/g; s/E\xCC\x82/Ê/g; s/E\xCC\x88/Ë/g
|
||
s/I\xCC\x88/Ï/g; s/I\xCC\x82/Î/g
|
||
s/O\xCC\x82/Ô/g; s/O\xCC\x88/Ö/g
|
||
s/U\xCC\x88/Ü/g; s/U\xCC\x82/Û/g
|
||
s/C\xCC\xA7/Ç/g
|
||
'
|
||
fi
|
||
}
|
||
|
||
function: strnacc "supprimer les accents dans le flux en entrée en UTF-8
|
||
|
||
si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée."
|
||
function strnacc() {
|
||
if [ $# -gt 0 ]; then strnacc <<<"$*"
|
||
else LANG=fr_FR.UTF-8 sed '
|
||
s/[à]/a/g
|
||
s/[éèêë]/e/g
|
||
s/[ïî]/i/g
|
||
s/[ôö]/o/g
|
||
s/[üû]/u/g
|
||
s/[ç]/c/g
|
||
s/[À]/A/g
|
||
s/[ÉÈÊË]/E/g
|
||
s/[ÏÎ]/I/g
|
||
s/[ÔÖ]/O/g
|
||
s/[ÜÛ]/U/g
|
||
s/[Ç]/C/g
|
||
'
|
||
fi
|
||
}
|
||
|
||
function: stripnl "Supprimer dans le flux en entrée les caractères de fin de ligne
|
||
|
||
si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée."
|
||
function stripnl() {
|
||
if [ $# -gt 0 ]; then stripnl <<<"$*"
|
||
else tr -d '\r\n'
|
||
fi
|
||
}
|
||
|
||
function: nl2lf "transformer dans le flux en entrée les fins de ligne en LF
|
||
|
||
si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée."
|
||
function nl2lf() {
|
||
if [ $# -gt 0 ]; then nl2lf <<<"$*"
|
||
else lawk 'BEGIN {RS="\r|\r\n|\n"} {print}'
|
||
fi
|
||
}
|
||
|
||
function: nl2crlf "transformer dans le flux en entrée les fins de ligne en CRLF
|
||
|
||
si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée."
|
||
function nl2crlf() {
|
||
if [ $# -gt 0 ]; then nl2crlf <<<"$*"
|
||
else lawk 'BEGIN {RS="\r|\r\n|\n"} {print $0 "\r"}'
|
||
fi
|
||
}
|
||
|
||
function: nl2cr "transformer dans le flux en entrée les fins de ligne en CR
|
||
|
||
si cette fonction est appelée avec des arguments, prendre \$* comme valeur du flux en entrée."
|
||
function nl2cr() {
|
||
if [ $# -gt 0 ]; then nl2cr <<<"$*"
|
||
else lawk 'BEGIN {RS="\r|\r\n|\n"; ORS=""} {print $0 "\r"}'
|
||
fi
|
||
}
|