Trova il testo in stringhe e file.
Sintassi
Select-String [-Path] <string[]> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>] Select-String -InputObject <psobject> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]
Descrizione
Il cmdlet Select-String cerca testo e modelli di testo in file e stringhe di input. È possibile utilizzarlo come Grep in UNIX e Findstr in Windows.
Select-String si basa su righe di testo. Per impostazione predefinita, Select-String trova la prima corrispondenza in ogni riga e, per ogni corrispondenza, visualizza il nome file, il numero di riga e tutto il testo nella riga contenente la corrispondenza.
Tuttavia, è possibile impostarlo per rilevare più corrispondenze per riga, visualizzare il testo prima e dopo la corrispondenza o visualizzare solo un valore booleano (true o false) che indichi se è stata trovata una corrispondenza.
Select-String utilizza la corrispondenza di espressioni regolari, ma può inoltre utilizzare una corrispondenza semplice che cerca l'input per il testo specificato.
Select-String può visualizzare tutte le corrispondenze di testo o interrompersi dopo la prima corrispondenza in ogni file di input. Può inoltre visualizzare tutto il testo che non corrisponde al modello specificato.
È inoltre possibile specificare che Select-String preveda una determinata codifica dei caratteri, ad esempio durante la ricerca di file con testo Unicode.
Parametri
-AllMatches
Cerca più di una corrispondenza in ciascuna riga di testo. Senza questo parametro, Select-String trova solo la prima corrispondenza in ciascuna riga di testo.
Quando Select-String trova più di una corrispondenza in una riga di testo, continua a generare un solo oggetto MatchInfo per la riga, ma la proprietà Matches dell'oggetto contiene tutte le corrispondenze.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-CaseSensitive
Utilizza la distinzione tra maiuscole e minuscole per le corrispondenze. Per impostazione predefinita, per le corrispondenze non viene fatta distinzione tra maiuscole e minuscole.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Context <Int32[]>
Acquisisce il numero specificato di righe prima e dopo la riga con la corrispondenza. Consente di visualizzare la corrispondenza nel contesto.
Se si immette un numero come valore di questo parametro, tale numero determina il numero di righe acquisite prima e dopo la corrispondenza. Se si immettono due numeri come valore, il primo numero determina il numero di righe prima della corrispondenza e il secondo il numero di righe dopo la corrispondenza.
Nella visualizzazione predefinita, le righe con una corrispondenza vengono indicate da una parentesi uncinata chiusa (ASCII 62) nella prima colonna della visualizzazione. Le righe non contrassegnate rappresentano il contesto.
Questo parametro non modifica il numero di oggetti generati da Select-String. Select-String genera un oggetto MatchInfo (Microsoft.PowerShell.Commands.MatchInfo) per ciascuna corrispondenza. Il contesto viene archiviato come matrice di stringhe nella proprietà Context dell'oggetto.
Quando si reindirizza l'output di un comando Select-String a un altro comando Select-String, il comando ricevente cerca solo il testo nella riga corrispondente (valore della proprietà Line dell'oggetto MatchInfo), non il testo nelle righe del contesto. Di conseguenza, il parametro Context non è valido nel comando Select-String ricevente.
Quando il contesto include una corrispondenza, l'oggetto MatchInfo per ogni corrispondenza include tutte le righe del contesto, ma le righe sovrapposte vengono visualizzate solo una volta nella visualizzazione.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Encoding <string>
Specifica la codifica dei caratteri che Select-String deve presupporre durante la ricerca del file. L'impostazione predefinita è UTF8.
I valori validi sono "UTF7", "UTF8", "UTF32", "ASCII", "Unicode", "BigEndianUnicode", "Default" e "OEM". "Default" è la codifica della tabella codici ANSI corrente del sistema. "OEM" è l'identificatore della tabella codici corrente del produttore dell'hardware originale per il sistema operativo.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Exclude <string[]>
Esclude gli elementi specificati. Il valore di questo parametro qualifica il parametro Path. Immettere un criterio o un elemento del percorso, ad esempio "*.txt". È consentito l'utilizzo di caratteri jolly.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Include <string[]>
Include solo gli elementi specificati. Il valore di questo parametro qualifica il parametro Path. Immettere un criterio o un elemento del percorso, ad esempio "*.txt". È consentito l'utilizzo di caratteri jolly.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-InputObject <psobject>
Specifica il testo da cercare. Immettere una variabile che contiene il testo oppure digitare un comando o un'espressione che consente di ottenere il testo.
Obbligatorio? |
true |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
true (ByValue) |
Accettare caratteri jolly? |
false |
-List
Restituisce solo la prima corrispondenza in ogni file di input. Per impostazione predefinita, Select-String restituisce un oggetto MatchInfo per ogni corrispondenza trovata.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-NotMatch
Trova il testo che non corrisponde al modello specificato.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Path <string[]>
Specifica il percorso dei file da cercare. È consentito l'utilizzo di caratteri jolly. La posizione predefinita è la directory locale.
Specificare i file nella directory, ad esempio "log1.txt", "*.doc" o "*.*". Se si specifica solo una directory, il comando ha esito negativo.
Obbligatorio? |
true |
Posizione? |
2 |
Valore predefinito |
|
Accettare input da pipeline? |
true (ByPropertyName) |
Accettare caratteri jolly? |
false |
-Pattern <string[]>
Specifica il testo da trovare. Digitare una stringa o un'espressione regolare. Se si digita una stringa, utilizzare il parametro SimpleMatch.
Per ulteriori informazioni sulle espressioni regolari, vedere about_Regular_Expressions.
Obbligatorio? |
true |
Posizione? |
1 |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Quiet
Restituisce un valore booleano (true o false) anziché un oggetto MatchInfo. Il valore è "true" se viene trovato il modello; in caso contrario è "false".
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-SimpleMatch
Utilizza una corrispondenza semplice, anziché una corrispondenza tra espressioni regolari. In una corrispondenza semplice, Select-String cerca l'input per il testo nel parametro Pattern. Il valore del parametro Pattern non viene interpretato come un'istruzione di espressione regolare.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
<CommonParameters>
Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.
Input e output
Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.
Input |
System.Management.Automation.PSObject È possibile reindirizzare qualsiasi oggetto che dispone di un metodo ToString a Select-String. |
Output |
Microsoft.PowerShell.Commands.MatchInfo o System.Boolean Per impostazione predefinita, l'output è un set di oggetti MatchInfo, uno per ogni corrispondenza trovata. Se si utilizza il parametro Quiet, l'output è un valore booleano che indica se è stato trovato il modello. |
Note
Select-String è come il comando Grep in UNIX e il comando FindStr in Windows.
Per utilizzare Select-String, digitare il testo che si desidera trovare come valore del parametro Pattern.
Per specificare il testo da cercare, eseguire le seguenti operazioni:
-- Digitare il testo in una stringa tra virgolette e reindirizzarlo a Select-String.
-- Archiviare una stringa di testo in una variabile e specificare la variabile come valore del parametro InputObject.
-- Se il testo viene archiviato in alcuni file, utilizzare il parametro Path per specificare il percorso dei file.
Per impostazione predefinita, Select-String interpreta il valore del parametro Pattern come espressione regolare. (Per ulteriori informazioni, vedere about_Regular_Expressions). Tuttavia, è possibile utilizzare il parametro SimpleMatch per eseguire l'override della corrispondenza tra espressioni regolari. Il parametro SimpleMatch trova le istanze del valore del parametro Pattern nell'input.
L'output predefinito di Select-String è un oggetto MatchInfo che include informazioni dettagliate sulle corrispondenze. Le informazioni si trovano nell'oggetto e sono utili quando si cerca testo nei file, poiché gli oggetti MatchInfo dispongono di proprietà come Filename e Line. Quando l'input non proviene dal file, il valore di questi parametri è "InputStream".
Se le informazioni nell'oggetto MatchInfo non sono necessarie, utilizzare il parametro Quiet che restituisce un valore booleano (true o false) per indicare se è stata trovata o meno una corrispondenza, anziché un oggetto MatchInfo.
In caso di corrispondenza di frasi, Select-String utilizza quella correntemente impostata per il sistema. Per trovare le impostazioni cultura correnti, utilizzare il cmdlet Get-Culture.
Per trovare le proprietà di un oggetto MatchInfo, digitare:
select-string -path test.txt -pattern "test" | Get-Member | Format-List -property *
Esempio 1
C:\PS>"Hello","HELLO" | select-string -pattern "HELLO" -casesensitive Descrizione ----------- Questo comando cerca una corrispondenza con distinzione tra maiuscole e minuscole del testo reindirizzato al comando Select-String. Di conseguenza, Select-String trova solo "HELLO", perché "Hello" non corrisponde. Poiché ciascuna delle stringhe tra virgolette viene trattata come riga, senza il parametro CaseSensitive, Select-String riconoscerebbe entrambe le stringhe come corrispondenze.
Esempio 2
C:\PS>select-string -path *.xml -pattern "the the" Descrizione ----------- In questo comando vengono cercati tutti i file della directory corrente con estensione xml e vengono visualizzate le righe di tali file che includono la stringa "the the".
Esempio 3
C:\PS>select-string -path $pshome\en-US\*.txt -pattern "@" Descrizione ----------- Questo comando cerca i file della Guida dedicati ai concetti di Windows PowerShell (about_*.txt) per informazioni sull'utilizzo del simbolo della a commerciale (@). Per indicare il percorso, questo comando utilizza il valore della variabile $pshome, in cui viene archiviato il percorso della directory di installazione di Windows PowerShell. In questo esempio, il comando cerca la sottodirectory en-US che contiene i file della Guida in lingua inglese (Stati Uniti) per Windows PowerShell.
Esempio 4
C:\PS>function search-help { $pshelp = "$pshome\es\about_*.txt", "$pshome\en-US\*dll-help.xml" select-string -path $pshelp -pattern $args[0] } Descrizione ----------- Questa funzione semplice utilizza il cmdlet Select-String per cercare una determinata stringa nei file della Guida di Windows PowerShell. In questo esempio, la funzione cerca i file in lingua inglese (Stati Uniti) nella sottodirectory "en-US". Per utilizzare la funzione per trovare una stringa, ad esempio "psdrive", digitare "search-help psdrive". Per utilizzare questa funzione in qualsiasi console di Windows PowerShell, modificare il percorso affinché punti ai file della Guida di Windows PowerShell nel sistema, quindi incollare la funzione nel profilo di Windows Powershell.
Esempio 5
C:\PS>$events = get-eventlog -logname application -newest 100 C:\PS> $events | select-string -inputobject {$_.message} -pattern "failed" Descrizione ----------- In questo esempio viene cercata la stringa "failed" nei 100 eventi più recenti del registro applicazioni del Visualizzatore eventi. Il primo comando utilizza il cmdlet Get-EventLog per ottenere i 100 eventi più recenti dal registro eventi dell'applicazione. Archivia quindi gli eventi nella variabile $events. Nel secondo comando viene utilizzato un operatore pipeline (|) per inviare gli oggetti nella variabile $events a Select-String. Viene utilizzato il parametro InputObject per rappresentare l'input dalla variabile $events. Il valore del parametro InputObject è la proprietà Message di ogni oggetto che passa tramite la pipeline. L'oggetto corrente viene rappresentato dal simbolo $_. Man mano che gli eventi arrivano nella pipeline, Select-String cerca la stringa "failed" nel valore della proprietà Message, quindi visualizza qualsiasi riga che contenga una corrispondenza.
Esempio 6
C:\PS>get-childitem c:\windows\system32\* -include *.txt -recurse | select-string -pattern "Microsoft" -casesensitive Descrizione ----------- In questo comando viene cercata la stringa "Microsoft" in tutti i file presenti nelle sottodirectory di C:\Windows\System32 con estensione txt. Il parametro CaseSensitive indica che la lettera "M" di "Microsoft" deve essere maiuscola, mentre gli altri caratteri devono essere minuscoli affinché Select-String individui una corrispondenza.
Esempio 7
C:\PS>select-string -path process.txt -pattern idle, svchost -notmatch Descrizione ----------- Questo comando trova nel file Process.txt righe di testo che non includono le parole "idle" o "svchost".
Esempio 8
C:\PS>$f = select-string -path audit.log -pattern "logon failed" -context 2, 3 C:\PS> $f.count C:\PS> ($f)[0].context | format-list Descrizione ----------- Il primo comando cerca la frase "logon failed" nel file Audit.Log. Viene utilizzato il parametro Context per acquisire le 2 righe che precedono e le 3 righe che seguono la corrispondenza. Nel secondo comando viene utilizzata la proprietà Count delle matrici di oggetti per visualizzare il numero di corrispondenze trovate, in questo caso 2. Il terzo comando visualizza le righe archiviate nella proprietà Context del primo oggetto MatchInfo. Viene utilizzata una notazione di matrice per indicare la prima corrispondenza (corrispondenza 0 in una matrice in base zero) e viene utilizzato il cmdlet Format-List per visualizzare il valore della proprietà Context come elenco. L'output è costituito da due oggetti MatchInfo, uno per ciascuna corrispondenza trovata. Le righe del contesto vengono archiviate nella proprietà Context dell'oggetto MatchInfo.
Esempio 9
C:\PS>$a = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript C:\PS> $b = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript -allmatches C:\PS> $a C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39: Start-Transcript and Stop-Transcript. C:\PS> $b C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39: Start-Transcript and Stop-Transcript. C:\PS>> $a.matches Groups : {Transcript} Success : True Captures : {Transcript} Index : 13 Length : 10 Value : Transcript C:\PS> $b.matches Groups : {Transcript} Success : True Captures : {Transcript} Index : 13 Length : 10 Value : Transcript Groups : {Transcript} Success : True Captures : {Transcript} Index : 33 Length : 10 Value : Transcript Descrizione ----------- In questo esempio viene illustrato l'effetto del parametro AllMatches di Select-String. AllMatches trova tutte le corrispondenze del criterio in una riga anziché trovare solo la prima corrispondenza in ciascuna riga. Nel primo comando dell'esempio vengono cercate le istanze della parola "transcript" nei file della Guida dedicati ai concetti di Windows PowerShell (Guida "about"). Il secondo comando è identico, con l'eccezione che utilizza il parametro AllMatches. L'output del primo comando viene salvato nella variabile $a. L'output del secondo comando viene salvato nella variabile $b. Quando viene visualizzato il valore delle variabili, la visualizzazione predefinita è identica, come illustrato nell'output di esempio. Tuttavia, con il quinto e il sesto comando viene visualizzato il valore della proprietà Matches di ciascun oggetto. La proprietà Matches del primo comando contiene solo una corrispondenza (ovvero un oggetto System.Text.RegularExpressions.Match), mentre quella del secondo comando contiene oggetti per entrambe le corrispondenze nella riga.
Vedere anche