12FF5B8

hico_horiuchiの技術系な覚え書き.

Gitでgrepとsedを組合せたaliasを作る

Gitで追跡してるファイルに対して、指定したパターンを置換するようなaliasを作った。

git grep

Gitで追跡してるファイルに対してgrepをかけるコマンド(標準)。
試しに現在製作中のalert2chatwork.rbでやってみる。

$ git grep  alert
README.md:alert2chatwork.rb
README.md:    $ ./alert2chatwork.rb
alert2chatwork.rb:require File.expand_path File.join(current_directory, 'lib/alerter.rb')
alert2chatwork.rb:alerter = Alerter.new config
alert2chatwork.rb:alerter.alert messages
lib/alerter.rb:  def alert(messages)

-lオプションを使えば、ファイル名のみ表示になる。

$ git grep -l alert
README.md
alert2chatwork.rb
lib/alerter.rb

git sed

git grep -lの結果をパイプでsedコマンドに繋ぐ。
~/.gitconfigに以下のaliasを追加。

[alias]
  sed =  "!f () { git grep -l $1 | xargs sed -i s/$1/$2/g; }; f"

試しにalertwarnに置換してみる。

$ git sed alert warn
$ git ls-files -m
README.md
alert2chatwork.rb
lib/alerter.rb