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
- 1363 megtekintés
Hozzászólások
A sed jól végzi a dolgát... Nálam hibátlan.
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Nalam az idezett sorokra jol mukodik. Amit kiprobalnek - teljesen sotetben lovoldozve -, hogy a /* -ben a *-ot is escapeled, igy \/\* lesz belole.
- A hozzászóláshoz be kell jelentkezni
ugyanaz
- A hozzászóláshoz be kell jelentkezni
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 :)
- A hozzászóláshoz be kell jelentkezni
copy-paste, + filenév módosítva: ugyanaz a fura sorrend
- A hozzászóláshoz be kell jelentkezni
Akkor itt nem a sed-del lesz a hiba, de a többit mi nem látjuk.
- A hozzászóláshoz be kell jelentkezni
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}'
- A hozzászóláshoz be kell jelentkezni
nalam teljesen jol mukodik a te megfejtesed is, igy is mukodik
cat filename.c | sed 's/\(.*\)\/\/\(.*\)/\1\/*\2 *\//' > otherfilename.c
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Urak,
köszönöm a tippet. Épp erre kezdtem gyanakodni, mikor jött a megfejtés. Nagy tanulság...
Köszönöm, István
- A hozzászóláshoz be kell jelentkezni
.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Jogos...
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Ne a végeredményből indulj ki. Az érdem Egmonté, mert ő jött rá, miért nem működik a formailag jó script és a kérdés ez volt.
- A hozzászóláshoz be kell jelentkezni
működik ez, de egy ilyen sor pl. csúnyán átveri:
printf("Ez // nem egy komment\n");
_m.
- A hozzászóláshoz be kell jelentkezni
weheh, meg ez is:
printf("\
// ez se komment \
");
- A hozzászóláshoz be kell jelentkezni
puts("http://example.com/");
puts("http:/*example.com/");*/
/* http://example.com/ */
/* http:/*example.com/ */ */
nemn olyan egyszeru ezt seddel. Viszont.
apt-get install liwc
ccmtcnvt <oldfile.c >newfile.c
- A hozzászóláshoz be kell jelentkezni