summaryrefslogtreecommitdiff
path: root/subst
diff options
context:
space:
mode:
Diffstat (limited to 'subst')
-rwxr-xr-xsubst51
1 files changed, 51 insertions, 0 deletions
diff --git a/subst b/subst
new file mode 100755
index 0000000..16a5209
--- /dev/null
+++ b/subst
@@ -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
+