script - mi a baj?

Fórumok

Sziasztok,
egy forrásban szeretném lecserélni a kommenteket más alakúra. (A // comment helyett szeretnék /* comment */ formát.)
Így:
cat filename.c | sed 's/^\(.*\)\(\/\/\)\( .*\)\($\)/\1\/*\3 *\//' > otherfilename.c

Nem értem, hogyan lesz ebből


PutString_P(PSTR("ATZ\r\n")); // SET ALL CURRENT PARAMETERS TO
// USER DEFINED PROFILE

*/ PutString_P(PSTR("ATZ\r\n")); /* SET ALL CURRENT PARAMETERS TO
*/ /* USER DEFINED PROFILE

ez? A sorvég jelzést már csak kínomban tettem oda, de semmit nem változtat. Nem értem, hogyan cserélődhet meg a substringek pozíciója.
Nem, nem másoltam rosszul, nem a sorok tolódtak el.
Help...
István

Hozzászólások

Nalam az idezett sorokra jol mukodik. Amit kiprobalnek - teljesen sotetben lovoldozve -, hogy a /* -ben a *-ot is escapeled, igy \/\* lesz belole.

sed 's,//\(.*\)$,/*\1 */,' test.c

ps: ha sok a / jel, nem kell a sed-ben is /-t használni, csak méginkább átláthatatlanná teszed. Egyébként a tied is jól működik :)

Szerintem is jó a scripted, viszont baromira olvashatatlan.

Alternatív megoldás awk-al:

cat filename.c| awk ' FS="//" {if (NF >=2) print $1,"/*" $2,"*/"; else print $1}'

nalam teljesen jol mukodik a te megfejtesed is, igy is mukodik

cat filename.c | sed 's/\(.*\)\/\/\(.*\)/\1\/*\2 *\//' > otherfilename.c

CRLF

DOS-típusú sorvégek vannak a fájlban. A sed a CR-t nem kapcsolja a sorvéghez, közönséges nyomtatható karakterként kezeli, így a komment zárását ez utánra pakolja. Terminálra kinyomtatva először a CR visszaküldi a kurzort a sor elejére, utána oda írja ki a */ jelet, majd LF ugrik a következő sor elejére.

Megvan a megoldas: \r\n (dos line vegzodes) van a soraid vegen. Mi meg \n -el probaltuk.

echo "// foobar" | sed blabla => jo
echo -e "// foobar\r\n" | sed blabla => nem jo

Rakd ad unix line endingre.

senki nem szólt még, hogy ne használd erre a cat parancsot, csak mn3monic utalt rá, helyesen.
a gyanús dos-os fájlt meg érdemes vi :se li vagy cat -vte iktatásval megnézni.

működik ez, de egy ilyen sor pl. csúnyán átveri:
printf("Ez // nem egy komment\n");

_m.