Tato otázka zde již obsahuje odpovědi :Jak mohu smazat všechny znaky spadající pod /* … */ včetně /* &*/?
(9 odpovědí)
Uzavřeno před 4 lety.
Linux
(9 odpovědí)
Uzavřeno před 4 lety.
Snažím se napsat skript, který smaže všechny komentáře a vše mezi tím uvnitř souborů C v mém aktuálním adresáři. Používám sed
, a to je to, co zatím mám:
sed -i '/ * [^()] */d' *.c
Toto funguje, když jsou komentáře na stejném řádku jako hvězdička nebo zpětné lomítko.
Nefunguje to však, když je tam řádek s komentářem bez lomítka nebo hvězdičky.
Vím, že sed jde řádek po řádku, jen nevím, jak mu říct, aby pokračoval v mazání, dokud neuvidí */
.
Přijatá odpověď:
Odstraňování komentářů bez použití skutečného C-preprocesoru není zrovna triviální. Jednou jsem přišel s něčím takovým:
perl -0777 -pe'
s{
/*.*?*/
| //[^n]*
| (
"(?:\.|.)*?"
| '''(?:\.)?.*?'''
| ??'''
| .[^'''"/]*
)
}{if ($1eq""){" "}else{$1}}exsg'
Což by mělo zahrnovat většinu případů, jako jsou:
printf("%c%c%s", '"' /* d-quote */, ''', "/*" "*/");
Další podrobnosti najdete v zajímavé diskusi.
Lum – sloučení sloupců ze dvou samostatných souborů?
Kruhové odkazy na názvy ve funkci Bash Shell, ale ne v Ksh?