abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 08:00 | Zajímavý článek

Portál Stack Overflow po roce opět vyzpovídal své uživatele, jedná se především o vývojáře softwaru, a zveřejnil detailní výsledky průzkumu. Průzkumu se letos zúčastnilo více než 80 tisíc vývojářů. Z Česka jich bylo 792. Ze Slovenska 252. Celkově bylo 91,67 % mužů a 5,31 % žen.

Ladislav Hagara | Komentářů: 0
dnes 07:00 | Zajímavý článek

Valentina Palmiotti ze společnosti Grapl v příspěvku na blogu podrobně rozebírá bezpečnostní chybu CVE-2021-3490 v Linuxu, konkrétně v eBPF, zneužitelnou k lokální eskalaci práv. Chyba byla v upstreamu opravena již v květnu.

Ladislav Hagara | Komentářů: 0
dnes 06:00 | Pozvánky

Od pátku 6. srpna do neděle 8. srpna proběhne online The Raku Conference, tj. konference věnovaná programovacímu jazyku Raku.

Ladislav Hagara | Komentářů: 0
včera 13:00 | IT novinky

Zítra končí bezpečnostní konference Black Hat USA 2021 (Twitter) a začíná bezpečnostní konference DEF CON 29 (Twitter). Kvůli COVID-19 letos probíhají obě konference hybridně, v Las Vegas i virtuálně. V rámci Black Hat budou vyhlášeny výsledky letošní Pwnie Awards (Twitter). Pwnie Awards oceňují to nejlepší, ale i to nejhorší z IT bezpečnosti (bezpečnostní Oscar a Malina v jednom). Viz nominace.

Ladislav Hagara | Komentářů: 1
včera 09:00 | Zajímavý článek Ladislav Hagara | Komentářů: 7
včera 08:00 | Pozvánky

MojeFedora.cz zve na online konferenci Nest with Fedora 2021 (Flock to Fedora). Konference proběhne od čtvrtka 5. srpna do soboty 7. srpna, vždy od 14:00. Na programu je řada zajímavých přednášek.

Ladislav Hagara | Komentářů: 0
včera 07:00 | Nová verze

CrossOver, komerční produkt založený na Wine, byl vydán ve verzi 21. Přehled novinek v ChangeLogu. Verze 21 je založena na Wine 6.0 s více než 8 300 vylepšeními.

Ladislav Hagara | Komentářů: 5
3.8. 16:22 | IT novinky

Byla vydána videohra o stínech minulosti Svoboda 1945: Liberation. Druhá světová válka skončila, ale ve vesnici Svoboda na česko-německém pohraničí mír nenastal. Přijeli jste rozhodnout desetiletí trvající spor. Komu věřit? Jak s tím souvisí vaše rodina? Vyzpovídejte svědky a odhalte pravdu o vlastní minulosti ve hře, jakou jste ještě nehráli.

Ladislav Hagara | Komentářů: 16
3.8. 15:22 | Komunita

Dnes 3. srpna od 20:00 a o týden 10. srpna od 20:00 proběhne online konference Qubes virtual mini-summit 2021 věnovaná operačnímu systému zaměřenému na bezpečnost Qubes OS (Wikipedie). Přednášky lze sledovat na YouTube.

Ladislav Hagara | Komentářů: 0
3.8. 07:00 | Nová verze

Po půl roce od vydání verze 2.33 byla vydána nová verze 2.34 knihovny glibc (GNU C Library). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
Jak synchronizujete data mezi zařízeními?
 (22%)
 (22%)
 (15%)
 (15%)
 (26%)
Celkem 73 hlasů
 Komentářů: 9, poslední 3.8. 17:35
Rozcestník



Dotaz: Sed či Awk script na odstranění C komentářů

7.7.2005 02:12 © | skóre: 37 | blog: escaped
Sed či Awk script na odstranění C komentářů
Přečteno: 235×
Dobrý den,

při veškeré snaze co mám se mi nedaří napsat regulární výraz na odstranění jakoby C komentářů.

Vzorek:
---cut---
// toto nezustane
toto zustane 1
toto zustane 2 // toto nezustane
toto zustane 3
/*
toto nezustane
*/
toto zustane 4
toto zustane 5 /* toto nezustane
toto nezustane
*/
toto zustane 6
toto zustane 7 /* toto nezustane */
toto zustane 8
/* toto nezustane */ toto zustane 9
/*
toto nezustane */ toto zustane 10
--cut---
Pokud komentář zabírá celý samostatný řádek nebo nějaká jeho část zabírá celý samostatný řádek, měl by být tento řádek zcela vymazán (např. 3 zakomentované řádky za "toto zustane" č. 3 z uvedeného vzorku by tedy zcela zmizely).

Pokud komentář začíná na konci řádku (viz "toto zustane" 2, 5, 7, 9 ve vzorku), měl by být odmazán a odmazány by měly být všechny zbylé mezery či tabulátory na konci takového řádku.

Pokud je komentář na začátku a následuje za ním další kód (viz. "toto zustane" 9 a 10 ve vzorku), měl by být kromě komentáře samotného odmazány i všechny mezery či tabulátory před kódem tak, aby se ocitl na začátku řádku.

Výstupem scriptu spuštěného na uvedený vzorek by jednoduše mělo být:
---cut---
toto zustane 1
toto zustane 2
toto zustane 3
toto zustane 4
toto zustane 5
toto zustane 6
toto zustane 7
toto zustane 8
toto zustane 9
toto zustane 10
---cut---
Vím, že je to poměrně složité (ostatně, kdyby to bylo jednoduché, neptal bych se zde).

PS: Ujišťuji vás, že rozhodně nejde o žádný DÚ, jak je tu dobrým zvykem se domnívat. Opravdu to potřebuji k reálné věci. Nástroje Sed a Awk musí být použity proto, že script, do něhož to potřebuji, poběží na stroji s nainstalovaným základním systémem bez Perlu či podobných nástrojů.

Děkuji za pomoc.

Odpovědi

7.7.2005 02:23 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Už jsem tohle taky jednou psal a nikdy jsem to nedokopal do rozumného stádia :-) ... Nakonec jsem použil nějaký program, teď jsem našel mangle, ale nevím jestli to je ono.
7.7.2005 02:45 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Problém je, že já to potřebuji v Sedu nebo v Awku (Gawku). Každopádně tu ten odkaz nalezne třeba někdo jiný, komu by se to hodilo.
7.7.2005 02:43 8an | skóre: 30
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
sed '/^ *\/\//d;s/ *\/\/.*//;:1;/^ *\/\*.*\*\/ *$/d;s/ *\/\*.*\*\/ *//;/\/\*/N;/\/\*/b1;'

Zjištění jak to funguje ponechávám jako těžší cvičení pro čtenáře :-D
If you build an operating system that even an idiot can use, only idiots will use it.
7.7.2005 02:47 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
To je naprosto dokonalé. Děkuji! Prostuduji si to.
7.7.2005 03:05 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
A zjištění, že to nefunguje taky? :-)
$ cat head.c 
/*
 * komentar
 */

$ sed '/^ *\/\//d;s/ *\/\/.*//;:1;/^ \/\.*\*\/ *$/d;s/ \/\.*\*\/ *//;/\/\*/N;/\/\*/b1;' head.c 
/*
 * komentar
 */

7.7.2005 07:46 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Vidíte, na tento případ jsem ve vzorku zapoměl. :-(
7.7.2005 08:05 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Mě to tedy funguje (máte to blbě opsané):
sed '/^ *\/\//d;s/ *\/\/.*//;:1;/^ *\/\*.*\*\/ *$/d;s/ *\/\*.*\*\/ *//;/\/\*/N;/\/\*/b1;' test
cat test
// toto nezustane
toto zustane 1
toto zustane 2 // toto nezustane
toto zustane 3
/*
toto nezustane
*/
toto zustane 4
toto zustane 5 /* toto nezustane
toto nezustane
*/
toto zustane 6
toto zustane 7 /* toto nezustane */
toto zustane 8
/* toto nezustane */ toto zustane 9
/*
toto nezustane */ toto zustane 10
/*
 * toto nezustane
 */ toto zustane 11
toto zustane 12
toto zustane 13 /*
    * toto nezustane
    */
/*
 * toto nezustane
 */
toto zustane 14
7.7.2005 09:32 Matouš Jan Fialka
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Přesto jsem jednu chybičku našel:
/*
 * toto nezustane
 */     toto zustane
kde bílé místo za koncem komentáře sestává i z tabulátoru a zůstane, což plně nevyhovuje podmínkám toho původního zadání.

Takže malá úprava by mohla být takováto (raději to někdo po mě projeďte, ale jen jsem přidal místo mezery [ \t]):
sed '/^ *\/\//d;s/ *\/\/.*//;:1;/^ *\/\*.*\*\/ *$/d;s/ *\/\*.*\*\/[ \t]*//;/\/\*/N;/\/\*/b1;'
7.7.2005 12:54 8an | skóre: 30
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Místo všech mezer je potřeba dát [ \t], neboli sed 's/ /[ \\t]/g'.

sed '/^[ \t]*\/\//d;s/[ \t]*\/\/.*//;:1;/^[ \t]*\/\*.*\*\/[ \t]*$/d;s/[ \t]*\/\*.*\*\/[ \t]*//;/\/\*/N;/\/\*/b1;'
If you build an operating system that even an idiot can use, only idiots will use it.
7.7.2005 09:42 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Trochu kratší:
sed -ne 'H;${x;s://[^\n]*::g;s:/\*\([^*]*\(\*[^/]\)\?\)*\*/::g;p}
Škoda, že ani gnu sed neumí *?, pak by to bylo úplně triviální.
7.7.2005 09:44 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Sed či Awk script na odstranění C komentářů
Jo sorry, tohle neodmazává ty mezery.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.