Nowe posty

Autor Wątek: Zmiana rodzaju komentowania w plikach tekstowych  (Przeczytany 2716 razy)

domaug

  • Gość
Zmiana rodzaju komentowania w plikach tekstowych
« dnia: 2014-04-01, 22:51:19 »
Jestem początkujący i chciałbym napisać skrypt w bash który zamienia jeden rodzaj komentarza na inny (np. // na #)
Używam do tego funkcji sed,ale mam następujące problemy

1)

 sed 's/[//]/#/g' plik.txt>tmp.txt
co daje np. //asfss ---> ## asfss
Co zrobić aby za podwójnego slash'a był jeden hash

2)
 sed 's/#/[//]/g' plik.txt>tmp.txt
i tu mi się wywala się całkowicie próbowałem wszystkich kombinacji z cudzysłowami oraz z nawiasami i nic nie pomogło. Wiem, że # jest wyrażeniem regularnym i pewnie stąd ten problem, ale jak to obejść?

3) Jeszcze mam zamianą komentarzy /*...*/ na // lub #. Nie wiem jak się za to zabrać. Jakieś wskazówki jak to można zrobić? (nie chcę kodu tylko wskazówkę).

Z góry dzięki

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Zmiana rodzaju komentowania w plikach tekstowych
« Odpowiedź #1 dnia: 2014-04-01, 23:40:12 »
> Co zrobić aby za podwójnego slash'a był jeden hash
Napisać poprawne wyrażenie regularne:
sed 's/\\/\\//#/g' plik.txt >tmp.txt
Ponieważ # i // komentują wszystko do końca linii, to raczej nie zamieniałbym już kolejnych wystąpień, więc opcja g jest zbędna.
Zamiast tmp.txt być może przyda ci się opcja -i polecenia sed?

3)
Na przykład za pomocą awk, w którym wykryjesz linie z początkiem i końcem komentarza, a w liniach pomiędzy dodasz "//".

Od razu ostrzegę, że trudne będzie zrobienie porządnego narzędzia wykrywającego całkowicie poprawnie początki i końce komentarzy jeśli zawartość pliku to kod w C czy Bashu. Bo np. taki ciąg "//" może wystąpić w stałej łańcucha znaków, a prosty regexp tego nie wykryje i uzna go za komentarz.

domaug

  • Gość
Zmiana rodzaju komentowania w plikach tekstowych
« Odpowiedź #2 dnia: 2014-04-02, 17:22:30 »
Dziękuję bardzo