風待ち

プログラミングの勉強や日々の出来事のログなど

PowerShellで複数ファイルを一括でgrepしていたのをBashでやるにはどうしたらいいのかわからなかったので調べたメモ。

複数ファイルのgrepIDEを使った開発ならそこで検索すればいい。

けど、単にエディタで書いているだけの小さなバッチやSQLなんかは、やたらファイルの数だけはあって、変更箇所がどの程度影響するのかを調べるのは割と面倒。

そんな時、複数ファイルを一括でgrepする時によく利用しているPowerShellのコマンドをBashでやったらどうなるか調べた。

前に書いた行数を調べる方法とたいして変わらない。

PowerShellでGet-Content(cat)する前に、$_.nameしているのは、どのファイルでヒットしたかわからなくなるからファイル名を出力してからSelect-String(grep)している。

PowerShell

PS> Get-ChildItem -Recurse -Include "*.sql" | % { $_.name; Get-Content $_ | Select-String "keyword" }

Bash

$ find . -type f -name "*.sql" | xargs grep -i "keyword"