현재 디렉터리에 있는 C 파일 내의 모든 주석과 모든 내용을 삭제하는 스크립트를 작성하려고 합니다. 나는 이것을 사용해 왔으며 sed
이것이 지금까지 내가 가지고 있는 것입니다:
sed -i '/ * [^()] */d' *.c
이 방법은 주석이 별표 또는 백슬래시와 같은 줄에 있을 때 작동합니다.
그러나 주석 줄에 슬래시나 별표가 없으면 작동하지 않습니다.
나는 sed가 한 줄씩 진행된다는 것을 알고 있지만 */
.
답변1
실제 C 전처리기를 사용하지 않고 주석을 제거하는 것은 쉽지 않습니다.언젠가 이런 생각을 한 적이 있다:
perl -0777 -pe'
s{
/\*.*?\*/
| //[^\n]*
| (
"(?:\\.|.)*?"
| '\''(?:\\.)?.*?'\''
| \?\?'\''
| .[^'\''"/]*
)
}{if ($1eq""){" "}else{$1}}exsg'
여기에는 다음과 같은 대부분의 경우가 포함됩니다.
printf("%c%c%s", '"' /* d-quote */, '\'', "/*" "*/");
자세한 내용은 흥미로운 토론을 참조하세요.
답변2
에서 이 작업을 수행할 필요가 없으면 sed
Perl을 사용하여 쉽게 수행할 수 있습니다.
perl -p0i -e 's#/\*.*?\*/##sg' *.c
아래 주석의 예에 표시된 것처럼 이렇게 하면 주석의 일부가 아닌 인용된 문자열의 일부가 제거됩니다.