sed

Vasilis Vasaitis vvas at hal.csd.auth.gr
Fri Jul 30 13:29:44 EEST 2004


On Wed, Jul 28, 2004 at 02:35:46AM +0300, Antonios-Kornilios Kourtis wrote:
> On Wed, Jul 28, 2004 at 01:43:47AM +0300, Antonios-Kornilios Kourtis wrote:
> > On Wed, Jul 28, 2004 at 12:36:20AM +0300, Nikos Kanellopoulos wrote:
> > > Ξέρεις κανείς πώς γίνεται με το sed
> > > κάτι ανάλογο με το  grep -o ;
> > 
> > Egw kapws etsi 8a to ekana :
> > 
> > sed -n 's/.*\(match\).*/\1/p' 
> > 
> 
> Basika paizontas ligo parathrhsa oti auto pou grafw parapanw (kai to
> antistoixo tou Giorgou) den exei _akribws_ to idio apotelesma me to
> grep -o
> 
> gia paradeigma:
> 
> $ cat > foo
> lala koko lala
> lala lala
> koko lala
> $ grep -o lala <foo
> lala
> lala
> lala
> lala
> lala
> $ sed -n 's/.*\(lala\).*/\1/p' < foo
> lala
> lala
> lala
> 
> Mia aplh (sxetika) lysh gia petyxoume  to idio 
> apotelesma me to grep -o 8a mporouse na einai:
> 
> $ sed -n -e 's/[^lala]/\n/pg' < foo | sed -e '/^$/d'
> lala
> lala
> lala
> lala
> lala
> 
> An kai mallon yparxoun kai pio swstoi (TM) tropoi :-)

  Μπα, αυτό που δίνεις είναι πολύ αφελές, και γενικά δε δουλεύει.
Είσαι σίγουρος ότι καταλαβαίνεις πώς δουλεύουν τα character classes;
Π.χ., δοκίμασε να του ταΐσεις τα παρακάτω:

bllllllll
lala

  Αυτό που θέλει αυτός που έκανε αρχικά την ερώτηση είναι κάτι τέτοιο:

#!/bin/sed -f
s/^lala/&\n/
t FOUND
s/lala/\n&/
D
: FOUND
P
D

  Αλλά δε μπορώ να καταλάβω γιατί κανείς να παιδεύεται με το sed, όταν
υπάρχουν πολύ πιο απλοί τρόποι να κάνεις το ίδιο πράμα:

perl -ne 'print "$1\n" and redo if s/.*?(lala)//'


-- 
Vasilis Vasaitis
"A man is well or woe as he thinks himself so."





More information about the Linux-greek-users mailing list