PowerShell Grep

  1. Select-String Cmdlet
  2. Compito Tipico di Grep Utilizzando PowerShell
  3. Utilizzando PowerShell Select-String per Trovare Modelli
PowerShell Grep

Dove vai quando sviluppi codice PowerShell ogni volta che hai bisogno di cercare contenuto all’interno di una stringa o di un intero file di testo? Sei a conoscenza del popolare utilità grep se hai usato molto Linux. L’utilità grep consente agli utenti di trovare testo utilizzando vari parametri; tuttavia, non è disponibile in Windows. Quindi, in questo scenario, abbiamo il cmdlet Select-String in PowerShell.

Select-String Cmdlet

Select-String controlla la corrispondenza iniziale in ogni riga di default e poi mostra il numero di riga, il nome del file e il testo appartenente alla riga corrispondente. Select-String può anche funzionare con più codifiche di file, ad esempio testo Unicode, determinando il tipo di codifica utilizzando il byte-order-mark (BOM). Select-String presumerà che sia un file UTF8 se il BOM è assente.

Alcuni usi del cmdlet Select-String sono spiegati di seguito.

Compito Tipico di Grep Utilizzando PowerShell

Iniziamo con un esempio. Supponiamo di avere una stringa con nomi e indirizzi, e inoltre, la stringa è non strutturata. Vogliamo estrarre i nomi. Quindi come lo faremo sarà spiegato di seguito.

||Sara Peiris|| 37, De silva road, Panadura
 --||Tim Gangster||-- 345, Yolks street,KL
 ==|Suz Maker|== 44 Main, Cydney, CA

Il testo sopra è assegnato alla variabile users. Quindi con il tentativo cercheremo un nome utilizzando il parametro ‘Pattern’.

test | Select-String -Pattern 'Sara Peiris'

Output:

powershell grep 1

Qui, possiamo capire che il metodo Select-String ha funzionato ma non ha restituito quello specifico poiché abbiamo passato l’intera stringa. Pertanto, proviamo a passare singole righe spezzando usando il carattere di nuova riga poiché ogni voce specifica è fornita in una singola riga.

PS> test = test -split "`n"
PS> test | Select-String -Pattern 'Sara Peiris'

Output:

powershell grep 2

Qui possiamo vedere che restituisce una singola riga. Successivamente, dovremmo cercare un modo per restituire più righe.

Utilizzando PowerShell Select-String per Trovare Modelli

Qui dobbiamo trovare modelli comuni che sono validi per tutte le righe. Quindi, se prendiamo l’esempio precedente, puoi vedere che tutti i nomi sono circondati da | e i nomi sono separati da uno spazio. Quindi ora, prendiamo questo modello utilizzando le regex e inviamolo con il parametro ‘Pattern’.

Select-String ha utilizzato le regex per recuperare ciascuna riga; dopodiché, dovrò separare tutti i nomi. Non richiediamo gli indirizzi per ciascuno in questo momento. Utilizzeremo l’attributo Matches di ciascun oggetto corrispondente restituito da Select-String per raggiungere questo obiettivo.

PS> test | Select-String -Pattern '\|\w+ \w+\|' | foreach {$_.Matches}

Output:

powershell grep 3

Ora puoi vedere che l’attributo Value ha i nomi di cui abbiamo bisogno, ma sono ancora circondati dal carattere |. Questo perché la corrispondenza regex ha incluso il carattere | nei nomi.

I caratteri pipe devono comunque essere inclusi nel filtro, ma non vogliamo che vengano restituiti come corrispondenze. I gruppi regex sono un metodo. Il risultato che vorresti restituire è circondato da parentesi, che indicano i gruppi regex. In questa situazione, proverò di nuovo racchiudendo la stringa regex che rappresenta il nome e il cognome.

PS> test | Select-String -Pattern '\|(\w+ \w+)\|' | foreach {$_.Matches}

Output:

powershell grep 4

Il carattere | è mostrato nel valore, ma possiamo vedere che il gruppo è diventato {0,1} il che significa che Select-String ha identificato il gruppo.

Reinserirò il riferimento nel ciclo for each per vedere questo gruppo. Poiché ogni attributo di gruppo è un array, possiamo fare riferimento al primo membro racchiudendolo tra parentesi e poi utilizzando la proprietà Value.

PS> test | Select-String -Pattern '\|(\w+ \w+)\|' | foreach {$_.Matches.Groups[1].Value}

Output:

powershell grep 5

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.