diff --git a/Commands.md b/Commands.md index 7da4fc758..9d4c79151 100644 --- a/Commands.md +++ b/Commands.md @@ -38,6 +38,7 @@ - [`git reset-file`](#git-reset-file) - [`git root`](#git-root) - [`git scp`](#git-scp) + - [`git sed`](#git-sed) - [`git setup`](#git-setup) - [`git squash`](#git-squash) - [`git summary`](#git-summary) @@ -700,6 +701,10 @@ Remove the latest 3 commits: git undo 3 ``` +## git sed + +Run grep as directed but replace the given files with the pattern. + ## git setup Set up a git repository (if one doesn't exist), add all files, and make an initial commit. `dir` defaults to the current working directory. diff --git a/bin/git-sed b/bin/git-sed new file mode 100755 index 000000000..966e6438a --- /dev/null +++ b/bin/git-sed @@ -0,0 +1,69 @@ +#!/bin/sh + +usage() { + cat < ] + +Run git grep and then send results to sed for replacement with the +given flags, if -f is provided. + +Also runs git commit if -c is provided. +EOF +} + +# don't commit by default +do_commit() { + true +} + +while [ "X$1" != "X" ]; do + case "$1" in + -c|--commit) + if git status --porcelain | grep .; then + echo "you need to commit your changes before running with --commit" + exit 1 + fi + do_commit() { + git commit -m"replace $search with $replacement + +actual command: + + $command" -a + } + ;; + -f|--flags) + if [ "X$2" = "X" ]; then + usage + echo "missing argument for $1" + exit 1 + fi + shift + flags=$1 + ;; + -h|--help) + usage + exit + ;; + -*) + usage + echo "unkonwn flag: $1" + exit 1 + ;; + *) + if [ "X$search" = "X" ]; then + search="$1" + elif [ "X$replacement" = "X" ]; then + replacement="$1" + else + usage + echo "too many arguments: $1" + exit 1 + fi + ;; + esac + shift +done + +command="git grep -l '$search' | xargs sed -i 's/$search/$replacement/$flags'" +git grep -l "$search" | xargs sed -i "s/$search/$replacement/$flags" +do_commit diff --git a/man/git-sed.1 b/man/git-sed.1 new file mode 100644 index 000000000..f637cd25d --- /dev/null +++ b/man/git-sed.1 @@ -0,0 +1,64 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "GIT\-SED" "1" "October 2015" "" "" +. +.SH "NAME" +\fBgit\-sed\fR \- replace patterns in git\-controlled files +. +.SH "SYNOPSIS" +\fBgit\-sed\fR [ \-c ] [ \-f \fIflags\fR ] \fIsearch\fR \fIreplacement\fR +. +.SH "DESCRIPTION" +Run git grep and then send results to sed for replacement with the given flags, if \-f is provided\. +. +.P +Also runs git commit if \-c is provided\. +. +.SH "OPTIONS" +\-c +. +.P +commit the resulting changes with a standard commit message detailing the exact command ran\. will fail if there are unstaged changes\. +. +.P +\-f +. +.P +will use the given regex flags in the sed command (for example "g" replaces multiple times on the same line)\. +. +.P + +. +.P +the pattern passed to grep and to the first part of the sed expression\. +. +.P + +. +.P +the replacement passed to sed, the second part of the sed expression\. +. +.SH "EXAMPLES" +. +.nf + +$ git sed \'my_function\' \'do_stuff\' +# \.\.\. only does the changes, without committing +$ git commit \-m"use proper function name" +$ git sed \-c \'do_stuff\' \'stuff\' +# \.\. does the changes and a commit +$ git sed \-f g do_stuff stuff +# \.\. g is actually pretty important, otherwise you will miss some +# stuff! +. +.fi +. +.SH "AUTHOR" +Written by Antoine Beaupré <\fIanarcat@debian\.org\fR> from inspiration by https://github\.com/da\-x/git\-search\-replace and http://stackoverflow\.com/questions/9651898/is\-there\-a\-git\-sed\-or\-equivalent +. +.SH "REPORTING BUGS" +<\fIhttps://github\.com/tj/git\-extras/issues\fR> +. +.SH "SEE ALSO" +<\fIhttps://github\.com/tj/git\-extras\fR> diff --git a/man/git-sed.html b/man/git-sed.html new file mode 100644 index 000000000..a89796d30 --- /dev/null +++ b/man/git-sed.html @@ -0,0 +1,144 @@ + + + + + + git-sed(1) - replace patterns in git-controlled files + + + + +
+ + + +
    +
  1. git-sed(1)
  2. +
  3. +
  4. git-sed(1)
  5. +
+ +

NAME

+

+ git-sed - replace patterns in git-controlled files +

+ +

SYNOPSIS

+ +

git-sed [ -c ] [ -f flags ] search replacement

+ +

DESCRIPTION

+ +

Run git grep and then send results to sed for replacement with the +given flags, if -f is provided.

+ +

Also runs git commit if -c is provided.

+ +

OPTIONS

+ +

-c

+ +

commit the resulting changes with a standard commit message + detailing the exact command ran. will fail if there are unstaged + changes.

+ +

-f <flags>

+ +

will use the given regex flags in the sed command (for example "g" + replaces multiple times on the same line).

+ +

<search>

+ +

the pattern passed to grep and to the first part of the sed expression.

+ +

<replacement>

+ +

the replacement passed to sed, the second part of the sed expression.

+ +

EXAMPLES

+ +
$ git sed 'my_function' 'do_stuff'
+# ... only does the changes, without committing
+$ git commit -m"use proper function name"
+$ git sed -c 'do_stuff' 'stuff'
+# .. does the changes and a commit
+$ git sed -f g do_stuff stuff
+# .. g is actually pretty important, otherwise you will miss some
+# stuff!
+
+ +

AUTHOR

+ +

Written by Antoine Beaupré <anarcat@debian.org> from +inspiration by https://github.com/da-x/git-search-replace and +http://stackoverflow.com/questions/9651898/is-there-a-git-sed-or-equivalent

+ +

REPORTING BUGS

+ +

<https://github.com/tj/git-extras/issues>

+ +

SEE ALSO

+ +

<https://github.com/tj/git-extras>

+ + +
    +
  1. +
  2. October 2015
  3. +
  4. git-sed(1)
  5. +
+ +
+ + diff --git a/man/git-sed.md b/man/git-sed.md new file mode 100644 index 000000000..19d1f48fd --- /dev/null +++ b/man/git-sed.md @@ -0,0 +1,59 @@ +git-sed(1) -- replace patterns in git-controlled files +====================================================== + +## SYNOPSIS + +`git-sed` [ -c ] [ -f ] + +## DESCRIPTION + +Run git grep and then send results to sed for replacement with the +given flags, if -f is provided. + +Also runs git commit if -c is provided. + +## OPTIONS + + -c + + commit the resulting changes with a standard commit message + detailing the exact command ran. will fail if there are unstaged + changes. + + -f <flags> + + will use the given regex flags in the sed command (for example "g" + replaces multiple times on the same line). + + <search> + + the pattern passed to grep and to the first part of the sed expression. + + <replacement> + + the replacement passed to sed, the second part of the sed expression. + +## EXAMPLES + + $ git sed 'my_function' 'do_stuff' + # ... only does the changes, without committing + $ git commit -m"use proper function name" + $ git sed -c 'do_stuff' 'stuff' + # .. does the changes and a commit + $ git sed -f g do_stuff stuff + # .. g is actually pretty important, otherwise you will miss some + # stuff! + +## AUTHOR + +Written by Antoine Beaupré <> from +inspiration by https://github.com/da-x/git-search-replace and +http://stackoverflow.com/questions/9651898/is-there-a-git-sed-or-equivalent + +## REPORTING BUGS + +<> + +## SEE ALSO + +<>