文字列を含むファイルを探したいのですが、その文字列をコメントセクションに含めることはできません。例: 一致させる文字列 = 'Map'
- /*アワーマップ*/
- //Map aoeuoeu
- ウオ=地図+2
grepは3とのみ一致する必要があります。
私は試した:
grep -r --include=*.mc "^.*[^\/][^\*].*\sMap"
編集する 私が投稿したケースは参考です。文字列を意味します。地図cppコードで使用
答え1
この記事を参考資料として、
https://stackoverflow.com/questions/2394017/remove-comments-from-cc-code
プリプロセッサを使用してソースファイルからコメントを削除し、それをgrepにパイプして目的のパターンを見つけます。
sh-4.3$ cat source.c
/*
* aoeuaeu Map
*/
// Map aoeuoeu
uoeu = Map + 2
aeiou Int; // Map
sh-4.3$ gcc -fpreprocessed -dD -E source.c | grep -v ^# | grep Map
uoeu = Map + 2
sh-4.3$
おそらくそれは必要ではないでしょうgrep -v ^#
。プリプロセッサを介してファイルを実行したときに出力されるコメント行を除外するためにここに含めました。
答え2
次のバージョンは一般的な簡単なケースをカバーしています。
perl -n0E 's!//.*!!g;
s!/\*.*?\*/!!gs;
say $ARGV if /Mat/' *.c *.md
@MikeAが指摘したように(そのソリューションを参照)、場合によってはCプリプロセッサまたはcpp-parserの例の入れ子になったコメント、文字列内のコメントが必要です。
.md
プロジェクトツリー内のすべてのアイテムを検索する(簡単な名前を想定...)
perl .... $(find -name="*.md")