[질문]shell 스크립트 필터링

zipsinworm의 이미지

shell 스크립트중에 sed문을 써서 필요없는 코멘트를 삭제하려고 하는데요

소스헤더 파일안에

#include <stdio.h> /* 입출력 */
                        ~~~~~~~~~~~

~~~표시가 된 부분을 스크립트로 지우고 싶은데

shell 스크립트로는 불가능 한가요?

안된다면 C프로램을 만들어야 하나요? ㅠㅠ

pcharley의 이미지

아래 명령으로 하면 지워질거 같네요...
단 주석이 줄바꿈 되지 않고, 뒤에 붙었을 경우에만 제대로 동작 할겁니다.

perl -pi -e 's/\/\*.+\*\///g' <파일>

cinsk의 이미지

C style comment (/* ... */)를 손쉽게 지우는 regular expression을 만들기는 불가능 합니다. (제가 알기로..)

가장 좋은 방법은 c preprocessor를 쓰는 것입니다. cpp를 쓰면, 모든 `#....' 형태의 directive를 다 처리하며, comment를 제거할 수 있습니다. 문제는 `#...' 형태의 directive를 놔 두고, comment만 제거하는 것인데, comp.lang.shell에 올라온 post에 나온 해결책이 있습니다:

$ sed 's/#/__POUND__/g' orig.c | gcc -E - | sed -e '/#/d' -e 's/__POUND__/#/g' 

테스트해보지 않았지만, 그럭저럭 쓸만할 것 같네요.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

aero의 이미지

.
.
.
.
.
Do not reinvent the wheel !

perl -MRegexp::Common=comment -pe 's/$RE{comment}{C}//g' orig.c

참고: http://search.cpan.org/perldoc?Regexp::Common::comment