[Soci SLIP] grep e tab

Loredana Loconte loredana a cs.bu.edu
Sab 28 Nov 2009 16:35:09 CET


Il 27 novembre 2009 12.02, Lucio Crusca <lucio a sulweb.org> ha scritto:
> $ echo -e "grep 'M\tN' \$1" > tabgrep
> $ chmod a+x tabgrep
> $ ./tabgrep prova

On Fri, 27 Nov 2009, Enrico Agliotti wrote:
> non mi sembra molto pił semplice :-)

E' semplice se lo devi fare piu' di una volta :) Ti crei uno script,
ti assicuri che sia nel tuo path, gli passi di volta in volta il tuo file 
come parametro e voila'. Cosi' ti ricordi anche come si fa, se no una
settimana dopo sei punto e a capo (almeno, questo e' quello che succede
a me).

Comunque, da linea di comando puoi usare:
	echo -e "grep 'M\tN' prova" |bash
che funziona.

	echo -e "grep 'M N' prova" |bash
giustamente non restituisce niente.

Incuriosita, ho fatto un paio di prove e ci sono cose curiose, che possono 
generare errori.

Da riga di comando:

	echo -e "grep 'M\tN' prova" 
restituisce:
	grep 'M	N' prova
Niente piu' tab.

Inoltre, posto (da riga di comando):

	echo -e "M\tN" > prova_tab
	echo -e "M N" > prova_spazio

	tab='\t'

	grep "M$tabN" prova_tab
M	N

	grep "M$tabN" prova_spazio
M N

Ma:
	grep "M N" prova_tab
non restituisce niente. 

Nota che il singolo spazio in prova_spazio viene riconosciuto come " " 
quando uso la variabile $tab in grep. MOLTO pericoloso, se uno cerca
un tab e NON uno spazio.

Se non ti importa che tab e spazio siano indistinguibili, allora il modo 
piu' semplice e' usare nell'espressione regolare la classe [[:blank:]] o 
[[:space:]], come avevi fatto tu. 

Se devi distinguere, e vuoi farlo da linea di comando e non da script:
	echo -e "grep 'M\tN' prova" |bash
ma la soluzione piu' elegante resta lo script proposto da Lucio.

Loredana





Maggiori informazioni sulla lista Soci