PDA

View Full Version : [Bash scripting] Trasformare spazi multipli in uno solo


mfonz85
09-02-2008, 11:10
Ciao a tutti,
domanda molto semplice: come faccio a trasformare spazi multipli in uno solo, con lo scripting Bash di UNIX??

Esempio:

Utente@laptop: ls -l

-rwxr-xr-x 1 Utente Utente 4548 Feb 7 19:30 signal.c
-rw-r--r-- 1 Utente Utente 10635 Feb 11 20:19 signal.exe

Come vedete, ovviamente la console mi indenta l'output per fare in modo di vederlo indentato bene, ovvero aggiunge spazi per indentarlo...

Se io volessi fare però una cosa del genere

Utente@laptop: ls -l | cut -f 5

Questa roba "dovrebbe" stamparmi il 5° field della ls -l
Non lo fa, ovviamente, perchè i dati non sono separati da TAB bensì da spazi, e in alcuni casi da spazi multipli!

Ovviamente non funziona nemmeno mettendo come delimiter ( -d ) lo spazio:

Utente@laptop: ls -l | cut -f 5 -d " "

Quindi, domanda finale: come faccio a trasformare gli spazi multipli in uno solo? Senza usare sed, solo con scripting bash normale. C'è qualche comando?

^TiGeRShArK^
09-02-2008, 12:00
non sono così masochista da farlo in bash :p
cmq potresti fare così:

#!/usr/bin/python
import sys

sentence = ''
for word in sys.argv[1].split(' '):
if (len(word) > 0):
sentence += word + ' '
print sentence

ed usarlo in questo modo (se lo metti in un file chiamato removeSpaces.py):

./removeSpaces.py "write whatever you want with spaces."

e il risultato ti viene restituito sulla stdout :p
ecco l'output :p

write whatever you want with spaces.

mfonz85
09-02-2008, 12:09
non sono così masochista da farlo in bash :p
cmq potresti fare così:

#!/usr/bin/python
import sys

sentence = ''
for word in sys.argv[1].split(' '):
if (len(word) > 0):
sentence += word + ' '
print sentence

ed usarlo in questo modo (se lo metti in un file chiamato removeSpaces.py):

./removeSpaces.py "write whatever you want with spaces."

e il risultato ti viene restituito sulla stdout :p
ecco l'output :p

write whatever you want with spaces.


ihihihih tiger sarebbe bello se potessi farlo con python ...

.split() :sbav: (sogno, nel bash...)

Il problema è che devo proprio farlo con bash scripting, niente python... infatti guarda secondo me i professori sono scemi a far usare robe "inutili", capisco che bash è potentissimo e ci puoi fare quello che vuoi, ma secondo me è da malati mentali dover imparare una cosa che tanto non si usa, molto meglio scriptare con python che è più veloce e più semplice...
Poi oh, ci sono filosofie e filosofie...ma io bash lo trovo una mazzata sui cosiddetti...

mfonz85
09-02-2008, 12:14
TROVATO! TROVATO!
Sbaglio sempre a cercare su Google le cose in inglese, basta scrivere in italiano :D
Dopo circa 1000 ricerche, comunque, eccolo...

tr -s " "

Sì ma che sbattone! Sto bash lo odio :muro:

^TiGeRShArK^
09-02-2008, 12:16
ihihihih tiger sarebbe bello se potessi farlo con python ...

.split() :sbav: (sogno, nel bash...)

Il problema è che devo proprio farlo con bash scripting, niente python... infatti guarda secondo me i professori sono scemi a far usare robe "inutili", capisco che bash è potentissimo e ci puoi fare quello che vuoi, ma secondo me è da malati mentali dover imparare una cosa che tanto non si usa, molto meglio scriptare con python che è più veloce e più semplice...
Poi oh, ci sono filosofie e filosofie...ma io bash lo trovo una mazzata sui cosiddetti...
ah ok .. pensavo ti servisse per lavoro :D
in quel caso avresti potuto usare lo strumento + appropriato, infatti qualche mio amico sistemista ormai ha totalmente abbandonato (per fortuna direi) il bash scripting e il perl in favore del python :p

kingv
09-02-2008, 13:36
ah ok .. pensavo ti servisse per lavoro :D
in quel caso avresti potuto usare lo strumento + appropriato, infatti qualche mio amico sistemista ormai ha totalmente abbandonato (per fortuna direi) il bash scripting e il perl in favore del python :p

dipende dalle attività che fai, ma su qualsiasi macchina anche la più leggera bashe perl li trovi pyton no.
dal mio punto di vista apprezzo il potere usare lo stesso strumento ovunque :O

giusto per la cronaca in perl:

ls -l | perl -npe 's/ +/ /g'