Cercare stringhe in piu' file con un solo script bash

Mar, 26/04/2005 - 16:48

Cercare stringhe in piu' file con un solo script bash

Inviato da neverdar 11 commenti

Questo script che mi appresto a descrivere permette di cercare all'interno di piu' file presenti in una directory e nelle sue sottodirectory delle stringhe.
Ci tengo a precisare che non e' semplicemente
cat * | text | grep -i
oppure
cat * | grep -i

Ma e' uno strumento che oltre all'occorrenza trovata nei file mostra anche il file che lo contiene e credo che sia una buona funzione .

Ad esempio se volessi cercare la stringa java, l'output sarebbe
------------------------------Output
++++++++./src/axisGui/CmdExec.java +++++++++++
import java.io.*;
import java.util.Vector;

^^^^^^^ ./src/axisGui/CmdExec.java ^^^^^^^^^^^^^^^^^
cat: ./src/axisGui/.xvpics: Is a directory

++++++ ./src/axisGui/Frame1.java +++++++++++++++++++
import javax.swing.JFrame;
import java.awt.event.WindowEvent;
import java.awt.Dimension;
-------------------------------output

Dopo aver descritto l'uso e lo scopo di questo algoritmo procediamo a descrivere l'implementazione e quindi il codice

Aprite un terminale eseguite vi header
e scrivete :

#/bin/bash
cat $1| grep -i $2 &> /dev/null
if [ $? == 0 ]; then
echo -e -n "\n+++++++++++++++++ $1 +++++++++++++++++++ \n"
cat $1| grep -i $2
echo -e -n "\n^^^^^^^^^^^^^^^^^ $1 ^^^^^^^^^^^^^^^^^^^ \n"
fi

quindi :wq (uscite e salvate il file)
eseguite
chmod +x header
mv header ~/bin/ (opzionale questo script vi sara' inserito nella vostra path )

e ora abbiamo finito perche basta eseguire
find -name \* -exec header {} \; | less

(se non avete eseguito il comando dovrete inserire tutto il percorso di header)

Spero che sara' utile a qualcuno


In:



Commenti

Ritratto di neverdar
#1

Inviato da neverdar il Ven, 29/04/2005 - 10:56.

precisazione

per vedere meglio i risultati vi consiglio alla fine della ricerca di muoversi con i tasti direzionali in modo tale che lo stderr verra' eliminato
oppure redirezionare lo standar error &>std.err

SPECTRUM IEEE LA POTENZA E' NULLA SENZA TEORIA DEL CONTROLLO



Ritratto di paolo
#2

Inviato da paolo il Ven, 29/04/2005 - 23:05.

Tag di formattazione.

E' praticamente incomprensibile, difficilissima da leggere, ma quanto vi costa utilizzare i tag di formattazione ?!

Voto: 5

Paolo Mainardi - Founder of ILDN



Ritratto di neverdar
#3

Inviato da neverdar il Lun, 02/05/2005 - 13:08.

Re: Tag di formattazione.

ho inviato una seconda volta la stessa guida con i tag di formattazione anche scusandomi

voto 1 per l'informazione

SPECTRUM IEEE LA POTENZA E' NULLA SENZA TEORIA DEL CONTROLLO



Ritratto di junion
#4

Inviato da junion il Mar, 03/05/2005 - 09:43.

Re: Tag di formattazione.

E' vero che e' mal scritto ma il codice che ha riportato neverdar funziona



Ritratto di paulatz
#5

Inviato da paulatz il Ven, 10/06/2005 - 15:55.

Re: Tag di formattazione.

Non vedo grossa differenza rispetto a
grep "REGEXP" LISTA_FILES



Ritratto di farthest
#6

Inviato da farthest il Mar, 12/07/2005 - 12:05.

Non capisco come funziona!

Ciao
la guida è interessante, per me, soprattutto per l'uso di find con l'opzione exec sono uno studente di tutt'altro che informatica.
il codice
Quote:

#/bin/bash
cat $1| grep -i $2 &> /dev/null
if [ $? == 0 ]; then
echo -e -n "\n+++++++++++++++++ $1 +++++++++++++++++++ \n"
cat $1| grep -i $2
echo -e -n "\n^^^^^^^^^^^^^^^^^ $1 ^^^^^^^^^^^^^^^^^^^ \n"
fi

io lo farei così
#!/bin/bash<br /><br />if cat $1| grep -i $2 2&gt;/dev/null; then<br />        echo -e -n &quot;\n+++++++++++++++++ $1 +++++++++++++++++++ \n&quot;<br />else<br />        echo -e -n &quot;\n----------------- $1 ------------------- \n&quot;<br />fi

Quote:

Non vedo grossa differenza rispetto a
grep "REGEXP" LISTA_FILES

beh io preferirei, se non erro
grep -E &quot;REGEXP&quot; LISTA_FILES

Mi spiegate come funziona find!?
dove inserisco la parola da cercare?
Thinking

bye

My Blog


I like Ubuntu



Ritratto di neverdar
#7

Inviato da neverdar il Ven, 15/07/2005 - 19:10.

buona risposta

grep -e pattern significa
stampa le righe che corrispondono ad un modello
valuta (evaluate pattern)
-e modello
Usa modello come modello; utile per proteggere i modelli che
iniziano con -.

per usare find
io eseguo
find | grep -i cosa_da_cercare

man grep
man find
contengono interessanti informazioni

SPECTRUM IEEE LA POTENZA E' NULLA SENZA TEORIA DEL CONTROLLO



Ritratto di farthest
#8

Inviato da farthest il Sab, 23/07/2005 - 18:47.

Re: buona risposta

Ecco un bel link
grep

Quote:

Usa modello come modello; utile per proteggere i modelli che
iniziano con -.

Scusami ma non ho capito!? Thinking

My Blog


I like Ubuntu



Ritratto di neverdar
#9

Inviato da neverdar il Lun, 01/08/2005 - 14:41.

Re: buona risposta

scusa avevo bevuto troppo poco per scrivere una cosa che avesse senso

credo che sia piu' utile eseguire da linea di comando
man grep
che spiegarti cosa volevo dire

Una volta eseguito man grep puoi
cercare all'interno delle pagine restituite l'opzione -e
(\-e) ed avrai le tue risposte

SPECTRUM IEEE LA POTENZA E' NULLA SENZA TEORIA DEL CONTROLLO



Ritratto di Mercurio
#10

Inviato da Mercurio il Lun, 28/05/2007 - 11:30.

Re: buona risposta

Ho visto che questa guida è un pò vecchia, possibile che nel 2005 grep non supportasse la ricerca ricorsiva come ora? O non ho ben capito lo scopo della guida?

Comunque:

grep -r --include="*.txt" ciao *

output:

prova.txt:ciao
test/Altraprova.txt:ciao mondo

Con nomi di file e tutto, anche su sottodirectory.

Massima Zen:
Se su OpenSuSE qualcosa vuoi configulale,
il pannello di contlollo devi aplile.
(e magari sfogliare la documentazione)