Come controllare se un file contiene una stringa specifica utilizzando PowerShell

  1. Controllare se un file contiene una stringa specifica utilizzando Select-String in PowerShell
  2. Controllare se un file contiene una stringa specifica utilizzando Get-Content in PowerShell
  3. Controllare file multipli che contengono una stringa specifica
  4. Conclusione
Come controllare se un file contiene una stringa specifica utilizzando PowerShell

Cercare una stringa specifica all’interno di un file di testo è un’attività comune quando si lavora con Windows PowerShell. Mentre gli ambienti Unix e Linux hanno il fidato comando grep, PowerShell offre un approccio alternativo utilizzando i cmdlet Select-String, Get-Content e Get-ChildItem.

In questo articolo, esploreremo vari metodi su come utilizzare PowerShell per trovare una stringa in un file di testo.

Controllare se un file contiene una stringa specifica utilizzando Select-String in PowerShell

Diciamo che abbiamo un file Demo.txt sulla nostra macchina e vogliamo trovare la stringa Demonstration in esso.

Ecco lo script PowerShell per farlo:

Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern 'Demonstration'

In questo script, utilizziamo Select-String con il parametro -Path per specificare la posizione del file e il parametro -Pattern per specificare la stringa che stiamo cercando.

Se il nostro file contiene il modello specificato ('Demonstration'), la console mostrerà il nome del file, il numero di riga e la riga contenente la stringa.

Output:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration

L’output sopra mostra il file Demo.txt con il suo percorso completo, la riga contenente la nostra stringa (riga 1) e la riga che contiene la stringa stessa (This is purely for demonstration).

Ma cosa succede se abbiamo solo bisogno di sapere se il file contiene o non contiene la stringa? In tal caso, possiamo modificare lo script come segue:

$Knw = Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern "Demonstration"

if ($Knw -ne $null) {
    echo Contains String
}
else {
    echo Does not Contain String
}

In questo script, abbiamo definito una variabile chiamata $Knw, che contiene il risultato della stringa cercata "Demonstration" nel file situato nel percorso specificato utilizzando Select-String. Poi, controlliamo se la variabile $Knw non è uguale a $null, il che significa che è stata trovata una corrispondenza nel file.

Se viene trovata una corrispondenza, stampa "Contains String.". Se non viene trovata nessuna corrispondenza, stampa "Does not Contain String.".

Output:

Contains String

Poiché il nostro file contiene il modello "Demonstration", l’output stampa Contains String.

Controllare se un file contiene una stringa specifica utilizzando Get-Content in PowerShell

Get-Content è un cmdlet che recupera il contenuto di un percorso specificato a un file e legge il contenuto del file per restituire un oggetto stringa. Per utilizzare Get-Content nel nostro file Demo.txt, utilizzeremo lo script illustrato di seguito:

Get-Content -Path C:\Users\pc\Demo\Demo.txt | Select-String -Pattern "Demonstration"

In questo script, utilizziamo Get-Content per leggere il contenuto del nostro file Demo.txt specificato dal parametro -Path e lo indirizziamo al comando Select-String, che utilizza il parametro -Pattern per individuare la stringa Demonstration.

Output:

This purely for demonstration

Se vogliamo solo confermare la presenza della stringa, possiamo utilizzare lo script mostrato di seguito:

If (Get-Content C:\Users\pc\Demo\Demo.txt | % { $_ -match "Demonstration" }) {
    echo Contains String
}
else {
    echo Does not Contains String
}

In questo script, utilizziamo Get-Content per leggere i dati del file situato in C:\Users\pc\Demo\Demo.txt e una pipeline (|) per elaborare ciascuna riga del file una alla volta. All’interno del blocco %{}, controlliamo se ciascuna riga contiene la stringa "Demonstration" utilizzando l’operatore -match.

Se una qualsiasi riga nel file contiene "Demonstration", stampa "Contains String". Se nessuna riga nel file contiene "Demonstration", stampa "Does not Contains String".

Output:

Contains String

Poiché il nostro file contiene la stringa specificata ("Demonstration"), otteniamo Contains String come output.

Controllare file multipli che contengono una stringa specifica

E se avessi più di cinquanta file di testo e volessi cercare una stringa in tutti? Discuteremo due modi per farlo.

Utilizzando Get-ChildItem e Search-String in PowerShell

Possiamo utilizzare i cmdlet Get-ChildItem e Select-String. Il cmdlet Get-ChildItem troverà uno o più file in base ai nostri criteri di ricerca.

Diamo un’occhiata a un esempio. Supponendo che la nostra cartella Demo contenga più di cinquanta file di testo, possiamo cercare la stringa Demonstration in tutti loro utilizzando questo script:

Get-ChildItem -Path C:\Users\pc\Demo\ -Recurse | Select-String -Pattern 'Demonstration'

In questo script, utilizziamo Get-ChildItem per elencare i file nella directory specificata (-Path) e nelle sue sottodirectory (-Recurse). L’operatore pipe (|) passa l’elenco dei file al cmdlet Select-String.

Infine, utilizziamo Select-String per cercare un modello specifico, 'Demonstration' in ciascun file.

La console stamperà i nomi dei file che contengono la nostra stringa, i numeri di riga e le righe contenenti la stringa.

Output:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem

Utilizzando Select-String in PowerShell

Possiamo anche utilizzare Select-String solo per controllare la stringa specifica su più file.

Select-String -Path C:\Users\pc\Demo\*.txt -Pattern 'Demonstration'

In questo script, utilizziamo il carattere jolly (*) nel parametro -Path per cercare tutti i file di testo nella cartella Demo. Il cmdlet Select-String cercherà la stringa in tutti i file corrispondenti.

Output:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem

Come nel caso precedente, la console stamperà i nomi dei file contenenti la nostra stringa, i numeri di riga e le righe contenenti la stringa.

Conclusione

Windows PowerShell fornisce un insieme di strumenti per cercare in modo efficiente stringhe in file di testo. Che tu preferisca utilizzare Select-String, Get-Content o una combinazione di Get-ChildItem e Select-String, puoi facilmente localizzare e manipolare i dati all’interno dei tuoi file.

Con questi cmdlet, non avrai problemi a trovare le informazioni di cui hai bisogno, rendendo le ricerche nei file di testo in PowerShell senza sforzo.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Autore: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

Articolo correlato - PowerShell String