140 lines
4.3 KiB
Bash
140 lines
4.3 KiB
Bash
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|||
|
##@cooked nocomments
|
|||
|
module: base.str base_ "Fonctions de base: gestion des valeurs chaines"
|
|||
|
|
|||
|
function: base_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 base_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: base_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 base_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: base_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 base_strlcomp() {
|
|||
|
if [ $# -gt 0 ]; then base_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/[œ]/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: base_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 base_strnacc() {
|
|||
|
if [ $# -gt 0 ]; then base_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: base_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 base_stripnl() {
|
|||
|
if [ $# -gt 0 ]; then base_stripnl <<<"$*"
|
|||
|
else tr -d '\r\n'
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
function: base_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 base_nl2lf() {
|
|||
|
if [ $# -gt 0 ]; then base_nl2lf <<<"$*"
|
|||
|
else lawk 'BEGIN {RS="\r|\r\n|\n"} {print}'
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
function: base_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 base_nl2crlf() {
|
|||
|
if [ $# -gt 0 ]; then base_nl2crlf <<<"$*"
|
|||
|
else lawk 'BEGIN {RS="\r|\r\n|\n"} {print $0 "\r"}'
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
function: base_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 base_nl2cr() {
|
|||
|
if [ $# -gt 0 ]; then base_nl2cr <<<"$*"
|
|||
|
else lawk 'BEGIN {RS="\r|\r\n|\n"; ORS=""} {print $0 "\r"}'
|
|||
|
fi
|
|||
|
}
|