문자열이 포함된 파일을 찾고 싶은데 해당 문자열이 주석 섹션에 있을 수 없습니다. 예: 일치시킬 문자열 = '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")