You can use it like this:
from=str1 to=sth agr path1 path2 ...
Supply no paths to make it use the current directory. Note that ag, xargs, and perl need to be installed and on PATH.
| # ag <https://github.com/ggreer/the_silver_searcher> | |
| # from=str1 to=sth agr path1 path2 ... | |
| # backs up to .pbak | |
| comment() { | |
| } | |
| doc() { | |
| } | |
| function agr { | |
| doc 'usage: from=sth to=another agr [ag-args]' | |
| comment -l --files-with-matches | |
| ag -0 -l "$from" "${@}" | pre-files "$from" "$to" | |
| } | |
| pre-files() { | |
| doc 'stdin should be null-separated list of files that need replacement; $1 the string to replace, $2 the replacement.' | |
| comment '-i backs up original input files with the supplied extension (leave empty for no backup; needed for in-place replacement.)(do not put whitespace between -i and its arg.)' | |
| comment '-r, --no-run-if-empty | |
| If the standard input does not contain any nonblanks, | |
| do not run the command. Normally, the command is run | |
| once even if there is no input. This option is a GNU | |
| extension.' | |
| AGR_FROM="$1" AGR_TO="$2" xargs -r0 perl -pi.pbak -e 's/$ENV{AGR_FROM}/$ENV{AGR_TO}/g' | |
| } |