特定の文字列を含んだファイルを格納したディレクトリをユニークに抽出するシェルスクリプト

found_dirs=()
for filepath in `find foobar -follow -type f`
do
    result=`grep ${filepath} -e hogehoge -l`
    if [ ${#result} -gt 0 ] && [ -f ${result} ]; then
        found_dirs+=(`dirname ${result}`)
    fi
done
echo "${found_dirs[@]}" | tr ' ' '\n' | sort -u

メモ

  1. 配列に次々と追加していき最後にソート&ユニークをかける方法がカンタン
  2. trコマンドは文字列の一括置換
  3. ${#str}で文字列長を取得
  4. 日本語キーボードでバッククオート(`)を打つには shift+@