Skip to content

Instantly share code, notes, and snippets.

@evansd
Created January 19, 2012 13:09
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save evansd/1639992 to your computer and use it in GitHub Desktop.
Save evansd/1639992 to your computer and use it in GitHub Desktop.
Global find and replace using ack
function substitute {
if [ -z "$1" -o -z "$2" ]; then
echo "Usage: substitue FROM_STRING TO_STRING [OPTION]..."
echo
echo "Replace all occurances of FROM_STRING (a sed-compatible regular"
echo "expression) with TO_STRING in all files for which ack-grep matches"
echo "FROM_STRING."
echo
echo "Any additional options are passed directly to ack-grep (e.g.,"
echo " --type=html would only run the substitution on html files)."
return 1
fi
# Escape forward slashes for sed
FROM_STRING=${1/\//\\/}
TO_STRING=${2/\//\\/}
shift 2
ack-grep -l --print0 "$@" "$FROM_STRING" | xargs -0 -n 1 sed -i -e "s/$FROM_STRING/$TO_STRING/g"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment