GNU/Linux >> Znalost Linux >  >> Linux

Smazání všech C komentářů se Sedem?

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.

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.


Linux
  1. Jak dosáhnout přenositelnosti pomocí Sed -i (úpravy na místě)?

  2. Doplnění s „sed“?

  3. Zobrazit všechny soubory až do shody?

  1. Barvení výstupu ocasu pomocí Sed?

  2. sed začátečník:změna všech výskytů ve složce

  3. Použití sed k rozdělení řetězce s oddělovačem

  1. sed vložte řádek s mezerami na konkrétní řádek

  2. Jak odstranit znak \r pomocí sed

  3. Regulární výraz se sed