diff options
Diffstat (limited to 'subst')
-rwxr-xr-x | subst | 51 |
1 files changed, 51 insertions, 0 deletions
@@ -0,0 +1,51 @@ +#!/bin/sh +# Substitute a string in many files. By Serge van den Boom, 20020826 + +# We need bash functionality. Executing bash with the shebang won't be +# portable as the location of bash differs. +if [ -z "$BASH_VERSION" ]; then + exec bash "$0" "$@" +fi + +if [ $# -eq 0 ]; then + { + echo "subst: substitute a string in a lot of files." + echo "By Serge van den Boom, 20020826" + echo "Usage: subst <pattern> <file> [...]" + echo -n "'pattern' should be a pattern in the form used by sed, " + echo " like 's/old/new/g'." + } 1>&2 + exit 1 +fi + +PAT="$1" +SEP="${PAT:1:1}" +GREPPAT="${PAT:2}" +eval GREPPAT='${GREPPAT%%'$SEP'*}' +shift +while [ "$#" -gt "0" ]; do + FILE="$1" + echo -n "$FILE: " + grep -q "$GREPPAT" < "$FILE" + EXITVAL=$? + case $EXITVAL in + 0) # Match found + ;; + 1) # No match found + echo "Nothing to do." + shift + continue + ;; + *) + echo "ERROR" + echo "Error: grep returned exit value ${EXITVAL}. Aborted." 1>&2 + exit 1 + esac + TEMPFILE="${FILE}.patchtree.$$.tmp" + mv -- "$FILE" "$TEMPFILE" + sed -e "$PAT" < "$TEMPFILE" > "$FILE" + rm -- "$TEMPFILE" + echo "Done." + shift +done + |