Newsgroup: it.comp.os.linux.sys
Titolo: Problemino Perl

Ho un file con separatori "|" vorrei sostituirlo con tab.
1|2|3
4|5|6
7|8|9
ecc
Riesco con:
tr "|" "\t" < filein > fileout
sed -e s/\|/\       /g < filein > fileout
(per digitare il tab uso CTRL-V)
Con perl ho provato con:
perl -pi -e 's/|/ /' fileinout
(per digitare il tab uso CTRL-V)
perl -pi -e 's/|/\t/' fileinout
Il tab lo posso scrivere nei due formati sopra evidenziati, il problema e'
il carattere "|", ho provato con vari formati (\|, "|", ecc ecc) ma questo
non viene interpretato correttamente.
Qualcuno sa dirmi in perl come posso scrivere il carattere "|" (pipe?)
nello script sopra indicato di sostituzione?
Grazie.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 nello script sopra indicato di sostituzione?
Usando il carattere di escape della shell.
$ perl -pi -e 's/\|/\t/' fileinout
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 $ perl -pi -e 's/\|/t/' fileinout
Avevo gia' provato e con questo formato non mi mi sostituisce nulla!
E' per questo motivo che ho chiesto, i formati tradizionali li ho gia'
provati.
Rimango sbalordito! 8-O
Con una "This is perl, version 5.005_02 built for i386-linux-thread" non
funziona!
Con una "This is perl, version 5.005_03 built for i386-linux"
funzionicchia; nel senso che su un file:
dkjfaksfjasjklfj|kdfjaksjflksafj|djfakkdsfjkas
dkjfaksfjasjklfj|kdfjaksjflksafj|djfakkdsfjkas
dkjfaksfjasjklfj|kdfjaksjflksafj|djfakkdsfjkas
il risultato e' questo:
dkjfaksfjasjklfj        kdfjaksjflksafj|djfakkdsfjkas
dkjfaksfjasjklfj        kdfjaksjflksafj|djfakkdsfjkas
dkjfaksfjasjklfj        kdfjaksjflksafj|djfakkdsfjkas
Viene sostituito il primo "|" e non il secondo!
Ho due comportamenti diversi; che versione stai utilizzando tu?


 Grazie.
Prego :-)
Saluti,
David
-- 
 . ''`.  Debian maintainer | 
http://snipurl.com/gofoxygo/
 : :'  :  Linuxer #334216  |  
http://www.hanskalabs.net/
 `. `'`    GPG: 1392B174   | 
http://www.debianizzati.org/
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174

 
Se vuoi sostituire tutte le occorrenze in una linea:
	s/\|/\t/g
$ perl -v
This is perl, v5.8.8 built for i486-linux.
$ man perlop
[ cut ]
s/PATTERN/REPLACEMENT/egimosx
     Searches a string for a pattern, and if found, replaces that pat-
     tern with the replacement text and returns the number of substi-
     tutions made.  Otherwise it returns false (specifically, the
     empty string).
     Options are:
        e   Evaluate the right side as an expression.
        g   Replace globally, i.e., all occurrences.
        i   Do case-insensitive pattern matching.
        m   Treat string as multiple lines.
        o   Compile pattern only once.
        s   Treat string as single line.
        x   Use extended regular expressions.


 This is perl, v5.8.8 built for i486-linux.
Non ti è piaciuta la mia risposta? :'(
Ovviamente... scherzo (dato che è periodo di flame... non qui
fortunatamente)
Saludos,


 
Non l'avevo letta :-(


 Aggiornare perl no, eh? :-P
Un altro metodo per escapare caratteri nelle regex in casi incasinati
(ad esempio perché ci sono talmente tante \ e / che sanguinano gli
occhi) è mettere il carattere tra "[" e "]" (esercizio: spiegare
perché funziona)
Ciao, Lorenzo

 Ciao, Lorenzo
