Ricerca nel sito web

Come utilizzare il comando fgrep per trovare stringhe di testo nei file


Breve: in questa guida adatta ai principianti, discuteremo alcuni esempi pratici del comando fgrep. Al termine di questa guida, gli utenti saranno in grado di eseguire operazioni di ricerca di testo in modo efficiente utilizzando l'interfaccia della riga di comando.

La ricerca del testo è una delle operazioni più comunemente eseguite. Tuttavia, questa semplice attività diventa rapidamente dispendiosa in termini di tempo se gli utenti non hanno familiarità con gli strumenti corretti. In Linux esistono varie utilità di filtraggio del testo come awk, sed, cut, ecc.

Tuttavia, in Linux, fgrep è l'utilità preferita per la semplice ricerca di testo. In questa guida discuteremo alcuni esempi pratici del comando fgrep che può essere utilizzato nella vita di tutti i giorni.

Il comando fgrep in Linux rientra nella famiglia del comando grep. Tuttavia, viene utilizzato per cercare il modello di stringa fisso anziché le espressioni regolari. Quindi il nome del comando è fgrep (Fixed GREP).

La sintassi del comando fgrep è simile a quella degli altri comandi della famiglia grep:

fgrep [OPTIONS] PATTERNS [FILES]

Per iniziare, creiamo un file di testo semplice con i seguenti contenuti per utilizzare un esempio:

cat input.txt

Qui possiamo vedere che il file di testo è pronto con il contenuto di esempio. Ora discutiamo alcuni esempi comuni del comando fgrep nei prossimi esempi.

1. In che modo fgrep è diverso dai comandi grep ed egrep?

Come suggerisce il nome, il comando fgrep viene utilizzato per cercare modelli di stringhe fissi. Interpreta il modello come una stringa fissa anziché come un'espressione regolare. Quindi esegue l'operazione di ricerca in modo efficiente in termini di tempo.

Per comprendere la differenza, utilizziamo un carattere punto (.) con il comando grep.

Questa semplice espressione regolare corrisponde a qualsiasi singolo carattere tranne la fine della riga:

grep ha. input.txt

Nell'output precedente, possiamo vedere che il carattere punto (.) corrispondeva al testo har, hat e has.

Ora utilizziamo lo stesso schema con il comando fgrep e osserviamo il risultato:

fgrep ha. input.txt

Nell'output sopra, possiamo vedere che il comando non riesce a trovare il modello specificato.

Ciò accade perché il comando fgrep non riconosce le espressioni regolari e tenta di cercare il modello inesistente – “ha. ".

2. Come cercare un modello in un file

Cominciamo con l'esempio base in cui cercheremo una stringa professional in un file input.txt:

fgrep professionals input.txt

Come possiamo vedere, la corrispondenza del modello riesce in due punti ed è evidenziata in rosso.

3. Come impostare il colore di output Grep per i modelli corrispondenti

Nell'esempio precedente abbiamo visto che, per impostazione predefinita, il pattern corrispondente è evidenziato in rosso. Tuttavia, possiamo modificare questo comportamento assegnando un valore diverso alle variabili d'ambiente GREP_COLOR.

Assegniamo il valore 32 alla variabile d'ambiente GREP_COLOR per evidenziare il modello corrispondente in colore verde:

export GREP_COLOR=32
fgrep professionals input.txt

Ora, prima di passare all'esempio successivo, deseleziona la variabile di ambiente GREP_COLOR per abilitare il comportamento predefinito:

unset GREP_COLOR

4. Come cercare più modelli in un file

A volte è necessario eseguire la corrispondenza dei modelli per più stringhe. In questi casi, possiamo fornire i modelli dal file di testo anziché dall'argomento della riga di comando.

Creiamo un file di testo che contiene più modelli su una riga separata:

cat pattern.txt

professionals
website

Ora utilizziamo questo file con l'opzione -f per la corrispondenza di modelli multipli:

fgrep -f pattern.txt input.txt

Nell'output precedente, possiamo vedere che la corrispondenza del modello ha esito positivo per le stringhe professionals e website.

5. Come limitare il numero di corrispondenze in un file

Per impostazione predefinita, il comando fgrep continua a eseguire la corrispondenza del modello finché non viene elaborato l'intero file.

Tuttavia, a volte dobbiamo limitare il numero di partite. In questi casi, possiamo usare l'opzione -m con il comando:

fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

In questo esempio, il comando fgrep interrompe l'elaborazione del file dopo aver trovato la corrispondenza con il primo modello.

6. Come stampare il nome del file durante la ricerca del modello

A volte, dobbiamo solo trovare il nome dei file in cui è presente un particolare pattern. In questi casi, possiamo utilizzare l'opzione -l del comando fgrep:

fgrep -l professionals input.txt

input.txt

Qui possiamo vedere che il comando stampa semplicemente il nome del file invece delle righe con i modelli corrispondenti.

7. Come stampare il nome del file quando la corrispondenza del modello non riesce

Nell'esempio precedente, abbiamo visto come stampare il nome del file quando la corrispondenza del modello ha esito positivo. Vediamo ora come eseguire l’operazione in senso inverso.

Proviamo a trovare il pattern inesistente nel file e osserviamo il risultato:

fgrep -L non-existing-word input.txt

input.txt

In questo esempio, abbiamo utilizzato l'opzione -L del comando che stampa il nome del file quando la corrispondenza del modello non riesce.

8. Come eliminare i messaggi di errore

La gestione degli errori gioca un ruolo cruciale durante la scrittura degli script di shell. Tuttavia, in alcuni scenari non critici, possiamo tranquillamente ignorare i messaggi di errore.

In fgrep, possiamo utilizzare l'opzione -s che elimina gli errori relativi a file inesistenti o illeggibili. Per comprendere meglio questo comportamento, proviamo a cercare un pattern nel file inesistente:

fgrep -s professionals non-existing-file.txt
echo $?

2

Nell'output precedente, possiamo vedere che il comando non visualizza alcun errore nel flusso di errori standard. Tuttavia, l'errore viene segnalato dal valore restituito diverso da zero.

Oltre a ciò, possiamo osservare lo stesso comportamento anche quando il file è illeggibile. Quindi, per prima cosa, modifica i permessi del file usando il comando chmod:

chmod 000 input.txt 
ls -l input.txt

Ora prova a cercare il modello e osserva il risultato:

fgrep -s professionals input.txt 
echo $?

9. Come escludere righe parzialmente corrispondenti

Negli esempi precedenti abbiamo visto che il comando fgrep esegue una corrispondenza parziale. Tuttavia, in alcuni casi, è necessario eseguire la corrispondenza esatta per l'intera riga. In questi casi, possiamo utilizzare l'opzione -x del comando fgrep.

fgrep -nx "the same site is sometimes hard to find." input.txt

Nell'output precedente, la corrispondenza esatta della riga avviene alla riga numero 20.

10. Come escludere file durante la ricerca ricorsiva

A volte è necessario saltare determinati file durante le operazioni di ricerca. In questi casi, possiamo utilizzare l'opzione --exclude del comando fgrep.

Per capirlo, crea prima una directory e copiaci alcuni file di esempio:

mkdir dir-1
cp input.txt dir-1/input.txt
cp input.txt dir-1/input.data
cp input.txt dir-1/input.md 

Ora cerchiamo il pattern in tutti i file della directory dir-1 tranne i file “.txt ”:

fgrep -r --exclude *.txt professionals dir-1

Nell'output sopra, possiamo vedere che la corrispondenza del modello è stata eseguita sui file con estensioni “.md ” e “.data ”.

11. Come escludere più tipi di file durante la ricerca ricorsiva

Nell'esempio precedente abbiamo visto come escludere file con estensioni particolari. Tuttavia, il comando diventa lungo quando vogliamo escludere file con più estensioni. In questi casi, possiamo fornire il modello di esclusione dal file invece dell'argomento della riga di comando:

Quindi, creiamo un file di testo che contenga più modelli di esclusione su una riga separata:

cat skip-pattern.txt 
*.txt
*.data

Ora utilizziamo questo file con l'opzione --exclude-from:

fgrep -r --exclude-from skip-pattern.txt professionals dir-1

Qui possiamo vedere che la corrispondenza del modello è stata eseguita solo sui file con estensioni “.md ”.

12. Come includere file durante la ricerca ricorsiva

Negli esempi precedenti abbiamo visto come escludere file effettuando operazioni di ricerca in modo ricorsivo. Vediamo ora come eseguire l’operazione in senso inverso.

Usiamo l'opzione --include del comando fgrep per effettuare una ricerca sui file con estensione “*.txt ”:

fgrep -r --include "*.txt" professionals dir-1

Nell'output sopra, possiamo vedere che la corrispondenza del modello viene saltata per i file con estensioni “*.md ” e “*.data ”.

In questo articolo abbiamo discusso alcuni esempi utili del comando fgrep. I principianti possono utilizzare questi esempi nella vita di tutti i giorni per migliorare la produttività mentre lavorano con Linux.

Conosci qualche altro miglior esempio del comando fgrep in Linux? Fateci sapere le vostre opinioni nei commenti qui sotto.