$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

あるディレクトリ以下で特定のパターンにヒットする行を全て削除する

例えば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追記