1. 背景

grepで何かを検索したいときにいつもググってしまいがちです。

ここでは、再帰的にファイルをgrepしたいとき、どのようにやるかを整理します。

2. grep

以下のようなコマンドです。

grep -r {キーワード} --include='*.{拡張子}' {起点となるディレクトリのパス}

具体例は以下です。outputディレクトリ以下のmarkdownファイルを検索します。検索キーワードは正規表現を使用して、行頭がimageで始まるものです。

grep -r ^image: --include='*.md'  content/

3. 文字列置換

以下のようにsedを使います。

grep -lr "/images/doc/params.webp" --include='*.md' content/ | xargs sed -e s@/images/doc/params.webp@/images/avatar.png@g

簡単な解説

  • grep -lr・・・ファイル名だけ出力する
  • sed -e・・・文字列置換
  • @・・・置換対象と置換後の文字区切り。置換対象にパスの区切りである/を入れているため@で区切っている。区切りはなんでも良い。

4. 参考

Linux - 再帰的なgrep - 覚えたら書く