Skip to content

Commit

Permalink
Merge pull request tj#466 from anarcat/master
Browse files Browse the repository at this point in the history
add simple sed command
  • Loading branch information
hemanth committed Oct 10, 2015
2 parents 72b5c17 + 9eb1a64 commit c14a206
Show file tree
Hide file tree
Showing 5 changed files with 341 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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.
Expand Down
69 changes: 69 additions & 0 deletions bin/git-sed
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#!/bin/sh

usage() {
cat <<EOF
usage: git sed [ -c ] [ -f <flags> ] <search> <replacement>
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
64 changes: 64 additions & 0 deletions man/git-sed.1
Original file line number Diff line number Diff line change
@@ -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 <flags>
.
.P
will use the given regex flags in the sed command (for example "g" replaces multiple times on the same line)\.
.
.P
<search>
.
.P
the pattern passed to grep and to the first part of the sed expression\.
.
.P
<replacement>
.
.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>
144 changes: 144 additions & 0 deletions man/git-sed.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

59 changes: 59 additions & 0 deletions man/git-sed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
git-sed(1) -- 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 &lt;flags&gt;

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

&lt;search&gt;

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

&lt;replacement&gt;

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é &lt;<[email protected]>&gt; 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

&lt;<https://github.com/tj/git-extras/issues>&gt;

## SEE ALSO

&lt;<https://github.com/tj/git-extras>&gt;

0 comments on commit c14a206

Please sign in to comment.