Compartilhar via


Select-String

Localiza texto em arquivos e cadeias de caracteres.

Syntax

Select-String
      [-Pattern] <string[]>
      [-Path] <string[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <string>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Pattern] <string[]>
      -InputObject <psobject>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <string>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Pattern] <string[]>
      -LiteralPath <string[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <string>]
      [-Context <Int32[]>]
      [<CommonParameters>]

Description

O Select-String cmdlet procura padrões de texto e texto em cadeias de caracteres de entrada e arquivos. Você pode usar Select-String semelhante ao grep no UNIX ou findstr.exe no Windows.

Select-String é baseado em linhas de texto. Por padrão, Select-String localiza a primeira correspondência em cada linha e, para cada correspondência, exibe o nome do arquivo, o número da linha e todo o texto na linha que contém a correspondência. Você pode direcionar Select-String para localizar várias correspondências por linha, exibir texto antes e depois da correspondência ou exibir um valor booliano (True ou False) que indica se uma correspondência foi encontrada.

Select-String usa correspondência de expressões regulares, mas também pode executar uma correspondência que pesquisa a entrada para o texto especificado.

Select-String pode exibir todas as correspondências de texto ou parar após a primeira correspondência em cada arquivo de entrada. Select-String pode ser usado para exibir todo o texto que não corresponde ao padrão especificado.

Você também pode especificar que Select-String deve esperar uma codificação de caractere específica, como quando você está pesquisando arquivos de texto Unicode. Select-String usa o BOM (byte-order-mark) para detectar o formato de codificação do arquivo. Se o arquivo não tiver BOM, ele pressupõe que a codificação seja UTF8.

Exemplos

Exemplo 1: Localizar uma correspondência que diferencia maiúsculas de minúsculas

Este exemplo faz uma correspondência que diferencia maiúsculas de minúsculas do texto que foi enviado pelo pipeline para o Select-String cmdlet.

'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch

As cadeias de caracteres de texto Hello e HELLO são enviadas pelo pipeline para o Select-String cmdlet. Select-String usa o parâmetro Pattern para especificar HELLO. O parâmetro CaseSensitive especifica que o caso deve corresponder apenas ao padrão de maiúsculas e minúsculas. SimpleMatch é um parâmetro opcional e especifica que a cadeia de caracteres no padrão não é interpretada como uma expressão regular. Select-String exibe HELLO no console do PowerShell.

Exemplo 2: Localizar correspondências em arquivos de texto

Esse comando pesquisa todos os arquivos com a .txt extensão de nome de arquivo no diretório atual. A saída exibe as linhas nesses arquivos que incluem a cadeia de caracteres especificada.

Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\*.txt -Pattern 'Get'

Alias.txt:8:Alias            cat -> Get-Content
Alias.txt:28:Alias           dir -> Get-ChildItem
Alias.txt:43:Alias           gal -> Get-Alias
Command.txt:966:Cmdlet       Get-Acl
Command.txt:967:Cmdlet       Get-Alias

Neste exemplo, Get-Alias e Get-Command são usados com o Out-File cmdlet para criar dois arquivos de texto no diretório atual, Alias.txt e Command.txt.

Select-String usa o parâmetro Path com o curinga asterisco (*) para pesquisar todos os arquivos no diretório atual com a extensão .txtde nome de arquivo . O parâmetro Pattern especifica o texto a ser correspondido a Get-. Select-String exibe a saída no console do PowerShell. O nome do arquivo e o número de linha precedem cada linha de conteúdo que contém uma correspondência para o parâmetro Pattern .

Exemplo 3: Localizar uma correspondência de padrão

Neste exemplo, vários arquivos são pesquisados para localizar correspondências para o padrão especificado. O padrão usa um quantificador de expressão regular. Para obter mais informações, consulte about_Regular_Expressions.

Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?'

C:\Program Files\PowerShell\6\en-US\default.help.txt:27:    beginning at https://go.microsoft.com/fwlink/?LinkID=108518.
C:\Program Files\PowerShell\6\en-US\default.help.txt:50:    or go to: https://go.microsoft.com/fwlink/?LinkID=210614

O Select-String cmdlet usa dois parâmetros, Path e Pattern. O parâmetro Path usa a variável $PSHOME que especifica o diretório do PowerShell. O restante do caminho inclui o subdiretório en-US e especifica cada *.txt arquivo no diretório. O parâmetro Pattern especifica para corresponder a um ponto de interrogação (?) em cada arquivo. Uma barra invertida (\) é usada como um caractere de escape e é necessária porque o ponto de interrogação (?) é um quantificador de expressão regular. Select-String exibe a saída no console do PowerShell. O nome do arquivo e o número de linha precedem cada linha de conteúdo que contém uma correspondência para o parâmetro Pattern .

Exemplo 4: usar Select-String em uma função

Este exemplo cria uma função para pesquisar um padrão nos arquivos de ajuda do PowerShell. Para este exemplo, a função só existe na sessão do PowerShell. Quando a sessão do PowerShell é fechada, a função é excluída. Para obter mais informações, consulte about_Functions.

PS> Function Search-Help
>> {
>> $PSHelp = "$PSHOME\en-US\*.txt"
>> Select-String -Path $PSHelp -Pattern 'About_'
>> }
PS>

PS> Search-Help

C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:2:   about_ActivityCommonParameters
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:31:  see about_WorkflowCommonParameters.
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:33:  about_CommonParameters.

A função é criada na linha de comando do PowerShell. O Function comando usa o nome Pesquisa-Help. Pressione Enter para começar a adicionar instruções à função. >> No prompt, adicione cada instrução e pressione Enter, conforme mostrado no exemplo. Depois que o colchete de fechamento for adicionado, você será retornado a um prompt do PowerShell.

A função contém dois comandos. A $PSHelp variável armazena o caminho para os arquivos de ajuda do PowerShell. $PSHOME é o diretório de instalação do PowerShell com o subdiretório en-US que especifica cada *.txt arquivo no diretório.

O Select-String comando na função usa os parâmetros Path e Pattern . O parâmetro Path usa a $PSHelp variável para obter o caminho. O parâmetro Pattern usa a cadeia de caracteres About_ como critérios de pesquisa.

Para executar a função, digite Search-Help. O comando da Select-String função exibe a saída no console do PowerShell.

Exemplo 5: Pesquisa para uma cadeia de caracteres em um log de eventos do Windows

Este exemplo pesquisa uma cadeia de caracteres em um log de eventos do Windows. A variável $_ representa o objeto atual no pipeline. Para obter mais informações, confira about_Automatic_Variables.

$Events = Get-WinEvent -LogName Application -MaxEvents 50
$Events | Select-String -InputObject {$_.message} -Pattern 'Failed'

O Get-WinEvent cmdlet usa o parâmetro LogName para especificar o log do aplicativo. O parâmetro MaxEvents obtém os 50 eventos mais recentes do log. O conteúdo do log é armazenado na variável chamada $Events.

A $Events variável é enviada pelo pipeline para o Select-String cmdlet . Select-String usa o parâmetro InputObject . A $_ variável representa o objeto atual e message é uma propriedade do evento. O parâmetro Pattern espécie a cadeia de caracteres Com falha e procura correspondências em $_.message. Select-String exibe a saída no console do PowerShell.

Exemplo 6: Localizar uma cadeia de caracteres em subdiretórios

Este exemplo pesquisa um diretório e todos os seus subdiretórios em busca de uma cadeia de caracteres de texto específica.

Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive

Get-ChildItem usa o parâmetro Path para especificar C:\Windows\System32*.txt. O parâmetro Recurse inclui os subdiretórios. Os objetos são enviados pelo pipeline para Select-String.

Select-String usa o parâmetro Pattern e especifica a cadeia de caracteres Microsoft. O parâmetro CaseSensitive é usado para corresponder ao caso exato da cadeia de caracteres. Select-String exibe a saída no console do PowerShell.

Observação

Dependendo de suas permissões, você pode ver As mensagens do Access negadas na saída.

Exemplo 7: Localizar cadeias de caracteres que não correspondem a um padrão

Este exemplo mostra como excluir linhas de dados que não correspondem a um padrão.

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set'  -NotMatch

O Get-Command cmdlet envia objetos pelo pipeline para o Out-File para criar o arquivo Command.txt no diretório atual. Select-String usa o parâmetro Path para especificar o arquivo Command.txt . O parâmetro Pattern especifica Get e Set como o padrão de pesquisa. O parâmetro NotMatch exclui Get e Set dos resultados. Select-String exibe a saída no console do PowerShell que não inclui Obter ou Definir.

Exemplo 8: Localizar linhas antes e depois de uma correspondência

Este exemplo mostra como obter as linhas antes e depois do padrão correspondente.

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3

Command.txt:1186:Cmdlet          Get-CmsMessage            3.0.0.0    Microsoft.PowerShell.Security
  Command.txt:1187:Cmdlet          Get-Command               3.0.0.0    Microsoft.PowerShell.Core
> Command.txt:1188:Cmdlet          Get-ComputerInfo          3.1.0.0    Microsoft.PowerShell.Management
> Command.txt:1189:Cmdlet          Get-ComputerRestorePoint  3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1190:Cmdlet          Get-Content               3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1191:Cmdlet          Get-ControlPanelItem      3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1192:Cmdlet          Get-Counter               3.0.0.0    Microsoft.PowerShell.Diagnostics

O Get-Command cmdlet envia objetos pelo pipeline para o Out-File para criar o arquivo Command.txt no diretório atual. Select-String usa o parâmetro Path para especificar o arquivo Command.txt . O parâmetro Pattern especifica Get-Computer como o padrão de pesquisa. O parâmetro Context usa dois valores, antes e depois, e marca correspondências de padrão na saída com um colchete angular (>). O parâmetro Context gera as duas linhas antes da primeira correspondência de padrão e três linhas após a última correspondência de padrão.

Exemplo 9: Localizar todas as correspondências de padrão

Este exemplo mostra como o parâmetro AllMatches localiza cada correspondência de padrão em uma linha de texto. Por padrão, Select-String localiza apenas a primeira ocorrência de um padrão em uma linha de texto. Este exemplo usa propriedades de objeto encontradas com o Get-Member cmdlet .

PS> $A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'

PS> $A

C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:5:    Describes the parameters that Windows PowerShell
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:9:    Windows PowerShell Workflow adds the activity common

PS> $A.Matches

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 4
Length   : 10
Value    : PowerShell

PS> $A.Matches.Length

2073

PS> $B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches

PS> $B.Matches.Length

2200

O Get-ChildItem cmdlet usa o parâmetro Path . O parâmetro Path usa a variável $PSHOME que especifica o diretório do PowerShell. O restante do caminho inclui o subdiretório en-US e especifica cada *.txt arquivo no diretório. Os Get-ChildItem objetos são armazenados na $A variável . A $A variável é enviada pelo pipeline para o Select-String cmdlet . Select-String usa o parâmetro Pattern para pesquisar cada arquivo para a cadeia de caracteres do PowerShell.

Na linha de comando do PowerShell, o conteúdo da $A variável é exibido. Há uma linha que contém duas ocorrências da cadeia de caracteres do PowerShell.

A $A.Matches propriedade lista a primeira ocorrência do padrão PowerShell em cada linha.

A $A.Matches.Length propriedade conta a primeira ocorrência do padrão Do PowerShell em cada linha.

A $B variável usa os mesmos Get-ChildItem cmdlets e Select-String , mas adiciona o parâmetro AllMatches . AllMatches localiza cada ocorrência do padrão Do PowerShell em cada linha. Os objetos armazenados nas $A variáveis e $B são idênticos.

A $B.Matches.Length propriedade aumenta porque, para cada linha, cada ocorrência do padrão do PowerShell é contada.

Parâmetros

-AllMatches

Indica que o cmdlet pesquisa mais de uma correspondência em cada linha de texto. Sem esse parâmetro, Select-String localiza apenas a primeira correspondência em cada linha de texto.

Quando Select-String encontra mais de uma correspondência em uma linha de texto, ele ainda emite apenas um objeto MatchInfo para a linha, mas a propriedade Matches do objeto contém todas as correspondências.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CaseSensitive

Indica que as correspondências de cmdlet diferenciam maiúsculas de minúsculas. Por padrão, as correspondências não diferenciam maiúsculas de minúsculas.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Context

Captura o número especificado de linhas antes e depois da linha que corresponde ao padrão.

Se você inserir um número como o valor desse parâmetro, esse número determina o número de linhas capturadas antes e após a correspondência. Se você inserir dois números como valor, o primeiro número determina o número de linhas antes da correspondência e o segundo determina o número de linhas após a correspondência. Por exemplo, -Context 2,3.

Na exibição padrão, as linhas com uma correspondência são indicadas por um colchete angular reto (>) (ASCII 62) na primeira coluna da exibição. Linhas desmarcadas são o contexto.

O parâmetro Context não altera o número de objetos gerados por Select-String. Select-String gera um objeto MatchInfo para cada correspondência. O contexto é armazenado como uma matriz de cadeias de caracteres na propriedade Context do objeto .

Quando a saída de um Select-String comando é enviada pelo pipeline para outro Select-String comando, o comando de recebimento pesquisa apenas o texto na linha correspondente. A linha correspondente é o valor da propriedade Line do objeto MatchInfo , não o texto nas linhas de contexto. Como resultado, o parâmetro Context não é válido no comando de Select-String recebimento.

Quando o contexto inclui uma correspondência, o objeto MatchInfo para cada correspondência inclui todas as linhas de contexto, mas as linhas sobrepostas aparecem apenas uma vez na exibição.

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

Especifica o tipo de codificação para o arquivo de destino. O valor padrão é Default.

Os valores aceitáveis para esse parâmetro são os seguintes:

  • ASCII Usa conjunto de caracteres ASCII (7 bits).
  • Bigendianunicode Usa UTF-16 com a ordem de bytes big-endian.
  • Padrão Usa a codificação que corresponde à página de código ativa do sistema (geralmente ANSI).
  • OEM Usa a codificação que corresponde à página de código OEM atual do sistema.
  • Unicode Usa UTF-16 com a ordem de bytes little-endian.
  • UTF7 Usa UTF-7.
  • UTF8 Usa UTF-8.
  • UTF32 Usa UTF-32 com a ordem de bytes little-endian.
Type:String
Accepted values:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Exclude

Exclui os itens especificados. O valor deste parâmetro qualifica o parâmetro Path. Insira um elemento ou padrão de caminho, como *.txt. Caracteres curinga são permitidos.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

Inclui os itens especificados. O valor deste parâmetro qualifica o parâmetro Path. Insira um elemento ou padrão de caminho, como *.txt. Caracteres curinga são permitidos.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

Especifica o texto a ser pesquisada. Insira uma variável que contém o texto ou digite um comando ou uma expressão que obtenha o texto.

Usar o parâmetro InputObject não é o mesmo que enviar cadeias de caracteres pelo pipeline para Select-String.

Quando você redireciona mais de uma cadeia de caracteres para o Select-String cmdlet, ele pesquisa o texto especificado em cada cadeia de caracteres e retorna cada cadeia de caracteres que contém o texto de pesquisa.

Quando você usa o parâmetro InputObject para enviar uma coleção de cadeias de caracteres, Select-String trata a coleção como uma única cadeia de caracteres combinada. Select-String retornará as cadeias de caracteres como uma unidade se encontrar o texto de pesquisa em qualquer cadeia de caracteres.

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-List

Somente a primeira instância do texto correspondente é retornada de cada arquivo de entrada. Essa é a maneira mais eficiente de recuperar arquivos de lista que têm conteúdo correspondente à expressão regular.

Por padrão, Select-String retorna um objeto MatchInfo para cada correspondência encontrada.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Especifica o caminho para os arquivos a serem pesquisados. O valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como caractere curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. Aspas simples dizem ao PowerShell para não interpretar nenhum caractere como sequências de escape. Para obter mais informações, consulte about_Quoting_Rules.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NotMatch

O parâmetro NotMatch localiza o texto que não corresponde ao padrão especificado.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Especifica o caminho para os arquivos a serem pesquisados. Caracteres curinga são permitidos. O local padrão é o diretório local.

Especifique arquivos no diretório , como log1.txt, *.docou *.*. Se você especificar apenas um diretório, o comando falha.

Type:String[]
Position:1
Default value:Local directory
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Pattern

Especifica o texto a ser encontrado em cada linha. Digite uma cadeia de caracteres ou expressão regular. Se você digitar uma cadeia de caracteres, use o parâmetro SimpleMatch .

Para saber mais sobre expressões regulares, confira about_Regular_Expressions.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Quiet

Indica que o cmdlet retorna um valor booliano (True ou False), em vez de um objeto MatchInfo . O valor será True se o padrão for encontrado; caso contrário, o valor será False.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SimpleMatch

Indica que o cmdlet usa uma correspondência simples em vez de uma correspondência de expressão regular. Em uma correspondência simples, Select-String pesquisa a entrada do texto no parâmetro Pattern . Ele não interpreta o valor do parâmetro Pattern como uma instrução de expressão regular.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

PSObject

Você pode redirecionar qualquer objeto que tenha um método ToString para Select-String.

Saídas

Microsoft.PowerShell.Commands.MatchInfo or System.Boolean

Por padrão, a saída é um conjunto de objetos MatchInfo com um para cada correspondência encontrada. Se você usar o parâmetro Quiet , a saída será um valor booliano que indica se o padrão foi encontrado.

Observações

Select-String é semelhante ao grep no UNIX ou findstr.exe no Windows.

O alias sls para o Select-String cmdlet foi introduzido no PowerShell 3.0.

Observação

De acordo com verbos aprovados para comandos do PowerShell, o prefixo de alias oficial para Select-* cmdlets é sc, não sl. Portanto, o alias adequado para Select-String deve ser scs, não sls. Essa é uma exceção a essa regra.

Para usar Select-String, digite o texto que você deseja localizar como o valor do parâmetro Pattern . Para especificar o texto a ser pesquisado, use os seguintes critérios:

  • Digite o texto em uma cadeia de caracteres entre aspas e, em seguida, redirecione-o para Select-String.
  • Armazene uma cadeia de caracteres de texto em uma variável e especifique a variável como o valor do parâmetro InputObject .
  • Se o texto for armazenado em arquivos, use o parâmetro Path para especificar o caminho para os arquivos.

Por padrão, Select-String interpreta o valor do parâmetro Pattern como uma expressão regular. (Para obter mais informações, consulte about_Regular_Expressions. Você pode usar o parâmetro SimpleMatch para substituir a correspondência de expressões regulares. O parâmetro SimpleMatch localiza instâncias do valor do parâmetro Pattern na entrada.

A saída padrão de Select-String é um objeto MatchInfo , que inclui informações detalhadas sobre as correspondências. As informações no objeto são úteis quando você está pesquisando texto em arquivos, pois os objetos MatchInfo têm propriedades como Filename e Line. Quando a entrada não é do arquivo, o valor desses parâmetros é InputStream.

Se você não precisar das informações no objeto MatchInfo , use o parâmetro Quiet . O parâmetro Quiet retorna um valor booliano (True ou False) para indicar se ele encontrou uma correspondência, em vez de um objeto MatchInfo .

Ao corresponder frases, Select-String usa a cultura atual definida para o sistema. Para localizar a cultura atual, use o cmdlet Get-Culture.

Para localizar as propriedades de um objeto MatchInfo , digite o seguinte comando:

Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *