Newsgroup: it.comp.os.linux.iniziare
Titolo: Aiuto per cut e sed

Descriverò passo-passo la soluzione sperando che qualcuno mi chiarisca
le idee.
Mi capito spesso di avere cdrom pieni di immagini TIFF, che a volte devo
inviare per posta elettronica. Sto tentando di automatizzare il tutto.
Per praticità, converto tutti i file in jpeg, scalandoli anche di
risoluzione, e poi li invio.
Fino a qui è facile:
+v
for i in *tif ; do convert -scale 800x600 "$i" /tmp/"$i".jpg ; done
-v
Proteggo il nome con "" perché spesso i nomi includono spazi.
Riesco anche ad automatizzare l'invio, aggiungendo prime del "done":
+v
mutt -s "$i" -a /tmp/"$i".jpg nome@server > /dev/null
-v
Fino a qui è tutto chiaro (BTW, sono giusti i marcatori del modo
verbatim per chi usa slrn?)
Il mio problema è il seguente: facendo così i file inviati si chiamano
nome.tif.jpg, non è un problema ma è brutto, e sono sicuro che si può
risolvere, e qui mi serve aiuto!
Ho letto la pagina man di cut fino alla nausea, e vorrei sfruttarlo in
pipe prima della conversione per trasformare la variabile $i in "$i fino
al primo punto, questo escluso". Pensavo si potesse fare con le opzioni
-f e -d, ma il limite sono io, non riesco a capire cosa devo specificare
come field list. Qualcuno è così gentile da farmi un esempio pratico?
Se non si può fare, ho visto righe di comando che usano sed per
processare le variabili, e avrei bisogno di un esempio anche qui.
Sono sicuro che la cosa è semplicissima, la bash mi ha sorpreso molte
volte a proposito. E' proprio la mancanza di esempi nel man (di cut,
quella di sed in effetti è un po' troppo...) che mi manca.
Grazie a chi vorrà aiutarmi.
-- 
Registered user at 
http://counter.li.org
 # 170453
Jabber JID: 
sil...@jabber.linux.it
GnuPG Key fingerprint = 10E0 2B05 0B0A 3525 8760  788B 59B6 C74A 250E 65B6

 esempio pratico?
Se non ho capito male: cut -d . -f 1
[dan@karma ~ ] > ls pippo.tif | cut -d . -f 1
pippo
Ciao.
-- 
***  Per E-mail rimuovi ModE dall'indirizzo  ***
  *** Linux user # 198661 --- ICQ 33500725 ***
*** homepage 
http://web.tiscalinet.it/kailed
 ***
            *** Powered by Linux ***

 [dan@karma ~ ] > ls pippo.tif | cut -d . -f 1
Appunto, era una cavolata, come ti dicevo...
Grazie!



I'm not prejudiced, I hate everyone equally.

 risolvere, e qui mi serve aiuto!
Puoi usare basename.
Ciao
  Andrea
-- 
Sognatore e' un uomo coi piedi saldamente ancorati sulle nuvole

 risolvere, e qui mi serve aiuto!
Oltre a quello che ti hanno già detto, la soluzione 'naturale' è usare
basename: al posto di "$i" metti `basename "$i" .tif` e il suffisso è tolto.
Almeno credo... :)
Gabry (TIMTOWTDI) :-)
-- 
Home Page:       
http://www-studenti.dm.unipi.it/~stilli/
mailto:
super...@libero.it
           ICQ UIN: 159169930
Caccole Stellari Website: 
http://www.caccolestellari.com/
Gruppo Utenti Linux Pisa: 
http://www.gulp.linux.it/

risolvere, e qui mi serve aiuto!
Giusto perché il caso è identico al mio ecco lo script che avevo scritto
grazie ai consigli che mi ha dato Bodo proprio su questo NG poco meno di
un anno fa (dovresti recuperare il thread perché c'erano diverse idee!).
#v+
#! /bin/bash
for i in *.gif; do
       name=$(echo $i | cut -d '.' -f 1) 
       convert $i $name.eps
done
#v-
Questo ovviamente converte tutte le gif in eps.
Possiam seguire anche l'approccio "mettiamo le pezze" ^_^, cioè andiamo 
a correggere le estensioni in un secondo momento.
Eccoti un paio di esempi, proprio in questi giorni ho letto qualcosa in
giro e mi sono sbizzarrito su problemi simili; mi trovi particolarmente
preparato. ;-)
	      **************** ESEMPIO 1 ****************
 
ls *.jpg | xargs -i basename {} .tif.jpg |xargs -i mv  {}.tif.jpg {}.jpg
	      **************** ESEMPIO 2 ****************
ls *.jpg|sed 's/\([^.]*\)\.tif\.jpg/mv \1.tif.jpg \1.jpg/' |/bin/bash -v
	      *************** FINE ESEMPI ***************
 
Per me il secondo esempio ha un fascino particolare, riesce ad esprimere
bene tutte le potenzialità della shell, ed esprime anche la flessibilità 
della gestione dei dispositivi come file in maniera veramente egregia.
Si puo' fare la stessa cosa usando awk sia durante la conversione che in
un secondo momento.
Non porta nulla di nuovo come idea per cui gli esempi te li risparmierei
tranquillamente. Se poi vogliamo sbizzarrirci io mi ci diverto da matti!
M'ero scritto delle note ben commentate ma le avevo applicate ad un caso
specifico per cui non le ho copiate (erano comunque solo una cinquantina
di righe, nel caso le posso postare in un secondo momento o, se vuoi, te 
le posso spedire a casa se ti interessano.
Nel frattempo aggiungo queste righe che devo dire mi sono uscite proprio
bene, con tanto si "sernificazione" semispontanea! ;-)
Ciao.
P.S. La mia firma parla chiaro e la mia risposta la trovavi pari pari su
Google.
Però non mi sarei divertito così tanto a risponderti! ;-)
Ri-ciao.
-- 
Antonio
| Pretendi una risposta immediata dal NG?
| Puoi ottenerla!
| 
http://groups.google.com/advanced_group_search

 bene, con tanto si "sernificazione" semispontanea! ;-)
Grazie mille a te a agli altri.


 	      *************** FINE ESEMPI ***************
se lo scopo e` solo rinominare:
rename .tif .jpg *.tif
 
-- 
Mario Michele Macaluso     -o)  | I cannot draw a cart, nor eat dried oats;  
m.macaluso .@. 
libero.it
   /\\  | If it be man's work I will do it.          
                          _\\_v |                                            
Kernel 2.2.14-5.0 on a i586     |                                            
(All addresses in headers are fake. Only one dot in signature.)

rename .tif .jpg *.tif
Provata la tua espressione, ma non va, mi da errore:
syntax error at (eval 1) line 1, near "."
Dato che rename non mi č mai "calato" (mi sembra simile a sed, ma non
mi č chiaro quanto) non so neppure dirti quale č il problema.
Comunque, mi piace di piů la riga mia! :-P
Ciao.
-- 
Antonio

tantopiù che in questo NG sono in mezzo a migliaia di inutili.
Eccole; Sottolineo che me le sono scritte per motivi puramente
didattici, magari c'è un altro modo ancora più semplice [1], che sarei
lieto di aggiungere ai miei appunti se qualcuno lo suggerisse.
##### COME CAMBIARE ESTENSIONE AD UNA SERIE DI FILE #####
Con Linux ci sono sempre più modi per fare la stessa cosa.
1. Ciclo for.
   Si può anche digitare tutto da riga di comando, o aggiungendo un
   puntoevirgola al posto di ogni accapo oppure digitandolo così com''è
(al
   primo "invio" la shella ci mostrerà il secondo invito (PS2).
   for FILE in *.eml
   do
        fn=`basename $FILE .eml`
        mv $fn.eml $fn.aaa
   done
2. Riscrittura dello stdout e invio in pipe alla shell.
   Questo "trucchetto" esprime bene le potenzialità della shell.
   ~$ ls *.eml |sed 's/\([^.]*\)\.eml/mv \1.eml \1.aaa/' |/bin/bash -v
   In pratica:
   - Uso ls per avere la lista dei file .eml;
   - Per ogni occorrenza della regex indicata (cioè per ogni file.eml)
     sed
     sostituisce tale stringa con la seguente: "mv file.eml file.aaa".
     In pratica si usa uno pseudoregistro, \1, per costruire il comando.
   - mando questo elenco di comandi in pipe alla shell.
     L''opzione -v (o sarebbe stata equivalente -x) serve solo ad avere
     sull''output l''operazione compiuta dalla shell.
3. Uso di xargs
   Xargs è un comando molto flessibile.
   ~$ ls *.eml |xargs -iCICCIA basename CICCIA .eml | xargs  -i% mv %.eml %.aaa
#######################################################################
Ciao.
[1] Ho scoperto un filemanager, vfu, che permette di rinominare molto
facilmente i file sia singolarmente (con mc non ho mai capito come si
fa) sia a gruppi.
-- 
Antonio

 	      *************** FINE ESEMPI ***************
Vogliamo andare sul pesante? ;-)
foreach (split /\n/,qx(ls -1 *.tif.jpg)) {$o=$_;s/\.tif//;rename $o,$_;}
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 verbatim per chi usa slrn?)
I marcatori del verbatim sono
#v+
	apertura: (hash v plus)  #v+
	chiusura: (hash v minus) #v-
#v-


 Comunque, mi piace di piů la riga mia! :-P
Il bello della democrazia [*]
ciao
PS.
mandami un output di mailq, altrimento non posso vedere
come si comporta il tuo script.
[*] o meglio,
    rename - se sei su Linux o su un qualsiasi altro sistema GNU
             e devi solo rinominare dei file
    sed ( e compagnia bella) - se sei sun un qualsiasi sistema Unix
			       o devi fare altre cose.
-- 
Mario Michele Macaluso     -o)  | Lawful Dungeon Master -- and they're MY    
m.macaluso .@. 
libero.it
   /\\  | laws!                                      


come si comporta il tuo script.
OK. T'ho appena mandato la versione "definitiva" (a meno di tuoi
consigli).
Ora mando anche l'output di mailq.
C'č molta "sporcizia" (ho tolto un po' di virgolette inutili, ad esempio), ma funziona bene, e non mi sembra troppo grezzo (magari solo un po' ^__^)
Ciao.
-- 
Antonio

foreach (split /\n/,qx(ls -1 *.tif.jpg)) {$o=$_;s/\.tif//;rename $o,$_;}
Cos'è, perl?
Ciao.
-- 
Antonio

 Cos'è, perl?
Yep. :-)


 Possibile che sia lo stesso?
rename --version
rename from util-linux-2.11f
adesso sappiamo perchč l'operazione non č riuscita.
ciao
mmm
-- 
Ancora otto ore di lavoro. ( ... se tutto va bene)