PowerShell Grep
-
Select-String
Cmdlet - Compito Tipico di Grep Utilizzando PowerShell
- Utilizzando PowerShell Select-String per Trovare Modelli

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:
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:
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:
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:
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:
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.