74 lines
1.9 KiB
Plaintext
74 lines
1.9 KiB
Plaintext
|
#!/bin/bash
|
||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||
|
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||
|
|
||
|
function display_help() {
|
||
|
uecho "$scriptname: modifier en masse un ensemble de valeurs numériques contigües dans un fichier
|
||
|
|
||
|
USAGE
|
||
|
$scriptname FILE FROMmin-FROMmax TO
|
||
|
|
||
|
remplacer les nombres de FROMmin à FROMmax par leur valeur correspondante,
|
||
|
sachant que FROMmin doit être remplacé par TO. On peut mentionner autant de
|
||
|
couples (FROM, TO) que nécessaire: ils seront traités dans l'ordre
|
||
|
|
||
|
OPTIONS
|
||
|
-n, --fake
|
||
|
Afficher le fichier tel qu'il serait modifié au lieu de le modifier en
|
||
|
place"
|
||
|
}
|
||
|
|
||
|
fake=
|
||
|
args=(
|
||
|
--help '$exit_with display_help'
|
||
|
-n,--fake fake=1
|
||
|
)
|
||
|
parse_args "$@"; set -- "${args[@]}"
|
||
|
|
||
|
file="$1"; shift
|
||
|
[ -n "$file" ] || die "vous devez spécifier le fichier à modifier"
|
||
|
|
||
|
seds=
|
||
|
while [ $# -ge 2 ]; do
|
||
|
from="$1"
|
||
|
if [[ "$from" == *-* ]]; then
|
||
|
let fromb="${from%-*}"
|
||
|
let frome="${from#*-}"
|
||
|
else
|
||
|
let fromb="$from"
|
||
|
let frome="$from"
|
||
|
fi
|
||
|
let to="$2"; shift 2
|
||
|
|
||
|
if [ "$to" -eq "$fromb" ]; then
|
||
|
einfo "$fromb --> $to aucune modification n'est nécessaire"
|
||
|
|
||
|
elif [ "$to" -lt "$fromb" ]; then
|
||
|
einfo "$fromb-$frome --> $to-$((to+frome-fromb))"
|
||
|
|
||
|
let from=fromb
|
||
|
while [ "$from" -le "$frome" ]; do
|
||
|
seds="$seds${seds:+; }s/$from/$to/g"
|
||
|
let from=from+1
|
||
|
let to=to+1
|
||
|
done
|
||
|
|
||
|
elif [ "$to" -gt "$fromb" ]; then
|
||
|
einfo "$frome-$fromb --> $((to+frome-fromb))-$to"
|
||
|
|
||
|
let from=frome
|
||
|
let to=to+frome-fromb
|
||
|
while [ "$from" -ge "$fromb" ]; do
|
||
|
seds="$seds${seds:+; }s/$from/$to/g"
|
||
|
let from=from-1
|
||
|
let to=to-1
|
||
|
done
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
edebug "Script sed: $seds"
|
||
|
|
||
|
[ -n "$fake" ] && args=() || args=(-i)
|
||
|
args+=("$seds" "$file")
|
||
|
sed "${args[@]}"
|