使用できないまたは削除できない環境を処理する必要がある場合、ack
このコマンドはC ++プロジェクトを介して文字列を見つけるために関連ファイルのみを制限しようとします。
grep pattern --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)
これで作業が完了します。今より多くの商品を提供する目的は、それをシェルスクリプトに入れることです。名前がと仮定しますwrapped_grep
。内容は次のとおりですwrapped_grep
。
#!/usr/bin/env bash
shopt -s extglob # enable advanced pattern matching
grep $1 --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)
ただし、実行しようとすると、同等のwrapped_grep pattern
直接grepクエリが期待どおりに一致するものを見つけても出力は提供されません。
直接grep呼び出しと同じ結果を提供するために、このスクリプトに欠けているものは何ですか?
答え1
シェルオプションは式の一部をextglob
有効にしますが、その部分にはオプションが必要です*([chCH]|cc|cxx|[ch]pp|py)
**/
globstar
globstar If set, the pattern ** used in a pathname expansion con‐ text will match all files and zero or more directories and subdirectories. If the pattern is followed by a /, only directories and subdirectories match.
だからあなたは必要になるかもしれません
shopt -s extglob globstar