例えばgolangを使っていて、ある処理をt.Cleanupに寄せたので対応するdeferを全部消したい時がある。
defer hogeHelper.Close()
単純に上のように特定のパターンにヒットする行を全て削除したいということであれば、findとsedを使うだけで出来る。Macの場合、gsedを入れておくとGNU sedとインターフェースを揃えられるので、こちらを利用する。
find . -type f -exec gsed -i '/defer hogeHelper.Close()/d' {} \;
一点注意として、findの-execはシェルを経由しないためaliasなどを認識してくれないということだ。これを知らなかったので alias sed='gsed'
している環境で、sedを指定してinvalid command code
というエラーが出続けてしまった。そのため、gsedを直接指定すると良い。
2023/07/11追記
sed -i **/*.go とかで良いのではないです? 個人的にはファイルを探してからやりたいのでgit grep -l | xargs sed -i ってやることが多いです。find -execよりもコマンド実行が少なくて効率も良い。
— (っ=﹏=c) .。o○ (@itchyny) 2023年7月10日