[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: elimiare le righe di commento da uno script



On 8/5/06, Mattia Dongili <malattia@linux.it> wrote:
On Sat, Aug 05, 2006 at 10:22:32AM +0200, Davide Prina wrote:
> Nigi Fabio wrote:
> > Fri, Aug 04, 2006 at 12:52:21PM -0400, Matt Dunford scrive:
>
> >>perl -i -ne 'print unless (/^#/)' tuoscript.sh
>
> Fabrizio Lippolis wrote:
>
> > sed -e 's/\#.*//' tuoscript
>
> >le ho provate entrambe sia la soluzione con sed sia quella con perl,
> >e praticamente fanno lo stesso lavoro,
>
> sbagliato
>
> Le soluzioni proposte non sono equivalenti.
> Quella con perl elimina solo i commenti su tutta la riga e il cui primo
> carattere è #
> La soluzione con sed elimina tutti i commenti, sia di inizio riga che non

e potenzialmente fa anche piu' danni:

> esempio
>
> $ echo "riga codice" > /tmp/mio_script
> $ echo "# riga commento" >> /tmp/mio_script

$ echo "voglio stampare questo carattere: #" >> /tmp/mio_script
$ echo "oppure il mio script contiene robaccia tipo \${REPLY##[nN]}" >> /tmp/mio_script

> $ echo "codice # commento" >> /tmp/mio_script
...
> $ sed -e 's/\#.*//' /tmp/mio_script

oppure, tanto per ribadire il concetto:

$ sed -e 's#\#.*##' /tmp/cacca1
riga codice

voglio stampare questo carattere:
oppure il mio script contiene robaccia tipo ${REPLY
codice

Una sfida!  Ma si puo' farlo con due linee di perl:

$ cat prova.sh
# commento
echo codice # commento
echo "voglio stampare questo carattere: #"
echo "oppure il mio script contiene robaccia tipo \${REPLY##[nN]}"
echo "un'altro" # commento
echo 'abc # def' # commento

$ cat prova.pl
$str_re = qr(\"(?:[^\\\"]*(?:\\.[^\\\"]*)*)\" |
\'(?:[^\\\']*(?:\\.[^\\\']*)*)\'
)x;
s/^((?:[^'"]+|$str_re)*)#.*$/$1/;

$ perl -p prova.pl prova.sh

echo codice
echo "voglio stampare questo carattere: #"
echo "oppure il mio script contiene robaccia tipo \${REPLY##[nN]}"
echo "un'altro"
echo 'abc # def'

--
-- Matt Dunford -- zenmatic@gmail.com



Reply to: