* Some utility functions to make performing substitutions in text

files easier.  Examples:

    substitute inputFile outputFile \
      --replace "@bindir@" "$out/bin" \
      --replace "@gcc@" "$GCC/bin/gcc"

    substitute inputFile outputFile --subst-var out

      (this is sugar for --replace "@out@" "$out")

    substituteInPlace file --replace a b

      (input and output are both `file'; the execute bit is preserved)
  

svn path=/nixpkgs/trunk/; revision=2239
This commit is contained in:
Eelco Dolstra 2005-02-15 17:44:03 +00:00
parent aac8011c8b
commit cbdd91f2a6

View File

@ -0,0 +1,39 @@
substitute() {
input=$1
output=$2
params=("$@")
sedArgs=()
for ((n = 2; n < ${#params[*]}; n += 1)); do
p=${params[$n]}
if test "$p" = "--replace"; then
pattern=${params[$((n + 1))]}
replacement=${params[$((n + 2))]}
n=$((n + 2))
sedArgs=("${sedArgs[@]}" "-e" "s^$pattern^$replacement^g")
fi
if test "$p" = "--subst-var"; then
varName=${params[$((n + 1))]}
n=$((n + 1))
sedArgs=("${sedArgs[@]}" "-e" "s^@${varName}@^${!varName}^g")
fi
done
sed "${sedArgs[@]}" < "$input" > "$output".tmp
if test -x "$output"; then
chmod +x "$output".tmp
fi
mv -f "$output".tmp "$output"
}
substituteInPlace() {
fileName="$1"
shift
substitute "$fileName" "$fileName" "$@"
}