条件付きパターンマッチング

条件付きパターンマッチング

文字列を含むファイルを探したいのですが、その文字列をコメントセクションに含めることはできません。例: 一致させる文字列 = 'Map'

  1. /*アワーマップ*/
  2. //Map aoeuoeu
  3. ウオ=地図+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")

関連情報