Newsgroup: it.comp.os.linux.iniziare
Titolo: Togliere le prime 6 colonne da alcuni sorgenti: Perl, sed o altro?

Salve. Ho una serie di vecchi files in cobol, e avrei la
necessità di eliminare i primi 6 caratteri di ogni riga di
codice (cioè i numeri di linea), ma non sono riuscito a
capire se mi conviene usare il perl, il programma sed (se
riesce a farlo) o altro. Dovrei compiere questa operazione
per un centinaio di files nella stessa directory. Voi che
mi consigliate di fare? Dal momento che sono molto scarso
nella programmazione ma la voglia di fare non mi manca, mi
va benissimo anche un sito o un manuale che tratti qualche
esempio pratico del genere da me cercato.  La documentazione
di sed l'ho già consultata, ma non sono riuscito a ricavarne
molto (di sicuro mi sarà sfuggito qualcosa).
Qualcuno sa indirizzarmi?  Grazie.
-- 
Ciao,
Giuseppe.
---
Togliete "/nessuno/" per rispondere via e-mail
---


$ echo "ciau Beppe" | cut -b "6-"
Beppe
Ciau
Angelo

 esempio pratico del genere da me cercato.  La documentazione
linux.interpuntonet.it
 (forse, non sono sicuro), cerca "Introduzione al
perl", un ottimo testo da cui cominciare ;-)
Io infatti ho cominciato ieri ;-))
Ciao, `matte.
-- 
err: signature too big

riesce a farlo) o altro. Dovrei compiere questa operazione
Se devi levare *le prime 6 colonne* di un file di testo non hai bisogno di 
cose complesse, basta usare 'colrm':
$colrm 1 6
000100questa e' una riga di prova  <enter>
questa e' una riga di prova
Quindi fai qualcosa del tipo:
for i in * ; 
do colrm 1 6 < $i > $i.tmp && mv $i.tmp $i ; 
done
-- 
Enrico Bodo  -   PhD student       
University of Rome "La Sapienza"    
Department of Chemistry        

Questo cava i primi sei _numeri_ da un file di testo
Per la precisione, i primi ALMENO 6, o piu`, numeri. Per ESATTAMENTE 6:
       $riga =~ s/^[0-9]{6}//;
e per FINO A 6:
       $riga =~ s/^[0-9]{1,6}//;
Per tutti i numeri iniziali, quanti siano, basta:
       $riga =~ s/^[0-9]+//;
Non conosco abbastanza Cobol per dire quale sia la piu` appropriata.
Quantunque su questo punto ci siano diverse scuole di pensiero, si puo`
evitare di usare esplicitamente una variabile (e anche di aprire
esplicitamente $ARGV[0]):
   while (<>) {
       s/^[0-9]{6,}//;
       print;
   }
Ciao.

Grazie a tutti per l'aiuto! Mi avete dato tanti input per imparare cose
nuove!
Innanzitutto non conoscevo i comandi "cut" e "colrm"...con Linux non si
finisce mai di imparare :-).
Allora...prendendo spunto dai vostri preziosi suggerimenti, ho provato
con la riga di comando:
for a in `ls`; do cat $a | cut -b "7-" > ${a}.new ; done
che sembra funzionare.
Questo naturalmente taglia le prime 6 colonne.
Interessante anche la versione in perl che permette di eliminare solo i
numeri delle prime 6 colonne...cosě si puň operare in maniera selettiva,
se necessario! Davvero molto bello :-))
Ora vado pure a leggere la sezione su inter.net...deve essere
interessante!
Grazie ancora!


    }
Gia` che ci sei, mi spieghi quel <> cosa e` di preciso?
Prende dati dallo stdin? Non e` <STDIN> ? E` un abbreviazione?


E` un abbreviazione?
E` un'abbreviazione per "while (<ARGV>) ...", che e` un'abbreviazione per
"while ($_ = <ARGV>) ...", che e` un'abbreviazione per... si potrebbe
continuare per altri due o tre passaggi.
Ciao.

 tante "magie" di perl.
Eeheh, bello, tnx


 ---
a questo punto manca solo il sed:
 sed -e 's/^.\{6\}//' file
oppure
 sed -e "s/^......//' file
ciao, andrea

 sed -e "s/^......//' file
Interessante. Non avevo saputo leggere tra le righe della man page di
sed! ;-)
Mi sembrava strano che uno stream editor non consentisse queste semplici
operazioni su un file di testo.
Per fortuna mi sbagliavo. :))
