Newsgroup: it.comp.os.linux.iniziare
Titolo: Manipolazione testo

Ciao a tutti,
data una lista, che comando dovrei usare per selezionare gli ultimi tre 
caratteri?
Grazie in anticipo
 
 
01103M-S-0266-S00015
01103M-S-0266-S00016
01103M-S-0268-S00025
01103M-S-0268-S00026
01103M-S-0268-S00027
01103M-S-0257-S00001
01103M-S-0257-S00002
01103M-S-0257-S00004
01103M-S-0257-S00006
01103M-S-0257-S00007
01103M-S-0259-S00017
01103M-S-0259-S00018
01103M-S-0259-S00020
01103M-S-0259-S00021
01103M-S-0259-S00022
01103M-S-0259-S00023
01103M-S-0259-S00024
01103M-S-0258-S00009
01103M-S-0258-S00010
01103M-S-0258-S00015
01103M-S-0260-S00025
01103M-S-0260-S00026
01103M-S-0260-S00027
01103M-S-0260-S00029
01103M-S-0513-S00003
01103M-S-0513-S00004
01103M-S-0513-S00005
01103M-S-0513-S00006
01103M-S-0513-S00007
01103M-S-0513-S00008
01103M-S-0515-S00016
01103M-S-0515-S00018
01103M-S-0515-S00019
01103M-S-0514-S00009
01103M-S-0514-S00010
01103M-S-0514-S00012
01103M-S-0514-S00015
01103M-S-0537-S00003
01103M-S-0537-S00004
01103M-S-0537-S00005
01103M-S-0539-S00021
01103M-S-0538-S00011
01103M-S-0538-S00012
01103M-S-0538-S00013
01103M-S-0538-S00014
01103M-S-0538-S00015
01103M-S-0538-S00016
01103M-S-0529-S00002

 caratteri?
[...]
di ogni riga?
 
soluzione rozza... ma propria rozza e inutilmente ridondante (sono molto 
arrugginito)
 
cat file.txt | rev | cut -c -3 | rev
 
altri te ne suggeriranno certamente una più elegante (questa funziona ma 
impiega 2 volte rev che dal punto di vista dell'economia di comandi è male)
-- 
Puppy Linux wiki:  
http://dokupuppylinux.info
 
Puppy Linux Forum: 
http://www.italianpuppy.org/
 
Windows me genuit, Ubuntu rapuere / tenet nunc Puppy Linux...
dropbox 2GB free - 
http://db.tt/Vc6IeN4
 

 01103M-S-0266-S00016
 
 
Se sei sicuro che tutte le righe sono uguali, puoi usare 
cut -c m-n
 
con m e n numeri opportuni (18-21 in questo caso)
 
Se le stringhe sono di lunghezza diversa io userei una pipe col
doppio rev:
cat file | rev | cut -c 1-3 | rev
 
 
 
-- 
AIOE °¿°  
Ho plonkato tutti quelli che postano da Google Groups!
Qui è Usenet, non è il Web!

 cat file.txt | rev | cut -c -3 | rev
[...]
oppure sempre usando cut ma invocandolo 2 volte
 
cut -d'S' -f3 file.txt | cut -c 3-
 
se l'ultimo campo di ogni riga
 
01103M-S-0266-S00015
01103M-S-0266-S00016
01103M-S-0268-S00025
ecc...
 
inizia sempre con S


 cut -d'S' -f3 file.txt | cut -c 3-
[...]
però se nel file ci sono righe con più di 3 campi è meglio la soluzione 
col doppio rev, oppure meglio ancora (mi sono ricordato) awk
 
awk '{ print substr( $0, length($0) - 2, length($0) ) }' file.txt
 
che dovrebbe sempre funzionare indipendentemente dal numero di campi, ti 
restituisce sempre gli ulimi 3 caratteri di una riga


 01103M-S-0266-S00015
[...]
 
Questa cosa mi ha incuriosito, cosi` ho
trovato un paio di soluzioni alternative:
 
sed 's/.*\(...\)/\1/'
 
Oppure:
 
grep -o '...$'
 
Quest'ultimo non stampa niente se vi sono
meno di 3 caratteri per linea.
 
bye,
 
-- 
 
piergiorgio

 01103M-S-0266-S00015
 
cut -c18- < mio_file_lista
 
L'uscita e' allo stout, cioe' stampa a video.
Se invece vuoi, le butti su un file cosi':
 
cut -c18- < mio_file_lista > mio_nuovo_file
 
Se invece la lunghezza non e' fissa fai un fischio ciao
 
-- 
bye, Yoda
 

 awk '{ print substr( $0, length($0) - 2, length($0) ) }' file.txt
 
Bellissima! non ci avrei pensato a awk, ciao
 
-- 
bye, Yoda
 

 Bellissima! non ci avrei pensato a awk
[...]
però la soluzione postata da Piergiorgio Sartor
 
grep -o '...$' file.txt
 
mi pare ancora migliore (e oltretutto se uno deve scriverla ci impiega 
molto meno) funziona anche con la mia versione di grep inclusa in busybox 
e quindi immagino con qualsiasi versione di grep, del resto mi pare che ai 
fini del risultato, siano equivalenti 


 fini del risultato, siano equivalenti
 
Concordo in pieno! m'era sfuggita, ma e' proprio velocissima.
 
Da me (jessie) va perfettamente:
grep --help | grep -A1 "\-\-only"
  -o, --only-matching       Mostra solo la parte della riga corrispondente al
                            MODELLO
 
pero' vedi giusto a dubitare, perche' ad esempio nel "Linux - guida di
riferimento" del 1999 non c'e' traccia dell'opzione -o.
E non solo non c'e' in grep, ma neppure in egrep ed fgrep ormai obsoleti
e deprecati. Ciao
 
-- 
bye, Yoda