Compartir a través de


Select-String

Busca texto en cadenas y archivos.

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

El Select-String cmdlet busca patrones de texto y texto en cadenas y archivos de entrada. Puede usar Select-String de forma similar a grep en UNIX o findstr.exe en Windows.

Select-String se basa en líneas de texto. De forma predeterminada, Select-String busca la primera coincidencia en cada línea y, para cada coincidencia, muestra el nombre de archivo, el número de línea y todo el texto de la línea que contiene la coincidencia. Puede dirigir Select-String para buscar varias coincidencias por línea, mostrar texto antes y después de la coincidencia, o mostrar un valor booleano (True o False) que indica si se encuentra una coincidencia.

Select-String usa la coincidencia de expresiones regulares, pero también puede realizar una coincidencia que busque en la entrada el texto que especifique.

Select-String puede mostrar todas las coincidencias de texto o detenerse después de la primera coincidencia en cada archivo de entrada. Select-String se puede usar para mostrar todo el texto que no coincide con el patrón especificado.

También puede especificar que Select-String debería esperar una codificación de caracteres determinada, como cuando se buscan archivos de texto Unicode. Select-String usa la marca de orden de bytes (BOM) para detectar el formato de codificación del archivo. Si el archivo no tiene boM, se supone que la codificación es UTF8.

Ejemplos

Ejemplo 1: Buscar una coincidencia que distingue mayúsculas de minúsculas

En este ejemplo se hace una coincidencia que distingue mayúsculas de minúsculas del texto que se envió a la canalización al Select-String cmdlet .

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

Las cadenas de texto Hello y HELLO se envían a la canalización al Select-String cmdlet . Select-String usa el parámetro Pattern para especificar HELLO. El parámetro CaseSensitive especifica que el caso debe coincidir solo con el patrón de mayúsculas y minúsculas. SimpleMatch es un parámetro opcional y especifica que la cadena del patrón no se interpreta como una expresión regular. Select-String muestra HELLO en la consola de PowerShell.

Ejemplo 2: Buscar coincidencias en archivos de texto

Este comando busca en todos los archivos con la extensión de .txt nombre de archivo en el directorio actual. La salida muestra las líneas de esos archivos que incluyen la cadena 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

En este ejemplo, Get-Alias y Get-Command se usan con el Out-File cmdlet para crear dos archivos de texto en el directorio actual, Alias.txt y Command.txt.

Select-String usa el parámetro Path con el comodín asterisco (*) para buscar en todos los archivos del directorio actual con la extensión .txtde nombre de archivo . El parámetro Pattern especifica el texto que debe coincidir con Get-. Select-String muestra la salida en la consola de PowerShell. El nombre de archivo y el número de línea preceden a cada línea de contenido que contiene una coincidencia para el parámetro Pattern .

Ejemplo 3: Buscar una coincidencia de patrón

En este ejemplo, se buscan varios archivos para buscar coincidencias para el patrón especificado. El patrón usa un cuantificador de expresiones regulares. Para obtener más información, 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

El Select-String cmdlet usa dos parámetros, Path y Pattern. El parámetro Path usa la variable $PSHOME que especifica el directorio de PowerShell. El resto de la ruta de acceso incluye el subdirectorio en-US y especifica cada *.txt archivo del directorio. El parámetro Pattern especifica que coincida con un signo de interrogación (?) en cada archivo. Una barra diagonal inversa (\) se usa como carácter de escape y es necesaria porque el signo de interrogación (?) es un cuantificador de expresiones regulares. Select-String muestra la salida en la consola de PowerShell. El nombre de archivo y el número de línea preceden a cada línea de contenido que contiene una coincidencia para el parámetro Pattern .

Ejemplo 4: Uso de Select-String en una función

En este ejemplo se crea una función para buscar un patrón en los archivos de ayuda de PowerShell. En este ejemplo, la función solo existe en la sesión de PowerShell. Cuando se cierra la sesión de PowerShell, se elimina la función. Para obtener más información, 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.

La función se crea en la línea de comandos de PowerShell. El Function comando usa el nombre Búsqueda-Help. Presione Entrar para empezar a agregar instrucciones a la función. En el símbolo del >> sistema, agregue cada instrucción y presione Entrar como se muestra en el ejemplo. Una vez agregado el corchete de cierre, se le devolverá a un símbolo del sistema de PowerShell.

La función contiene dos comandos. La $PSHelp variable almacena la ruta de acceso a los archivos de ayuda de PowerShell. $PSHOME es el directorio de instalación de PowerShell con el subdirectorio en-US que especifica cada *.txt archivo del directorio.

El Select-String comando de la función usa los parámetros Path y Pattern . El parámetro Path usa la $PSHelp variable para obtener la ruta de acceso. El parámetro Pattern usa la cadena About_ como criterios de búsqueda.

Para ejecutar la función , escriba Search-Help. El comando de la función muestra la salida en la consola de Select-String PowerShell.

Ejemplo 5: Búsqueda de una cadena en un registro de eventos de Windows

En este ejemplo se busca una cadena en un registro de eventos de Windows. La variable $_ representa el objeto actual de la canalización. Para obtener más información, vea about_Automatic_Variables.

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

El Get-WinEvent cmdlet usa el parámetro LogName para especificar el registro de aplicaciones. El parámetro MaxEvents obtiene los 50 eventos más recientes del registro. El contenido del registro se almacena en la variable denominada $Events.

La $Events variable se envía a la canalización al Select-String cmdlet . Select-String usa el parámetro InputObject . La $_ variable representa el objeto actual y message es una propiedad del evento. El parámetro Pattern especifica la cadena Failed y busca coincidencias en $_.message. Select-String muestra la salida en la consola de PowerShell.

Ejemplo 6: Buscar una cadena en subdirectorios

En este ejemplo se busca en un directorio y en todos sus subdirectorios una cadena de texto específica.

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

Get-ChildItem usa el parámetro Path para especificar C:\Windows\System32*.txt. El parámetro Recurse incluye los subdirectorios. Los objetos se envían por la canalización a Select-String.

Select-String usa el parámetro Pattern y especifica la cadena Microsoft. El parámetro CaseSensitive se usa para coincidir con el caso exacto de la cadena. Select-String muestra la salida en la consola de PowerShell.

Nota

En función de los permisos, es posible que vea Mensajes denegados de acceso en la salida.

Ejemplo 7: Búsqueda de cadenas que no coinciden con un patrón

En este ejemplo se muestra cómo excluir líneas de datos que no coinciden con un patrón.

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

El Get-Command cmdlet envía objetos de la canalización a Out-File para crear el archivo Command.txt en el directorio actual. Select-String usa el parámetro Path para especificar el archivo Command.txt . El parámetro Pattern especifica Get y Set como patrón de búsqueda. El parámetro NotMatch excluye Get y Set de los resultados. Select-String muestra la salida en la consola de PowerShell que no incluye Get o Set.

Ejemplo 8: Buscar líneas antes y después de una coincidencia

En este ejemplo se muestra cómo obtener las líneas antes y después del patrón coincidente.

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

El Get-Command cmdlet envía objetos de la canalización a Out-File para crear el archivo Command.txt en el directorio actual. Select-String usa el parámetro Path para especificar el archivo Command.txt . El parámetro Pattern especifica Get-Computer como patrón de búsqueda. El parámetro Context usa dos valores, antes y después, y marca las coincidencias de patrón en la salida con un corchete angular (>). El parámetro Context genera las dos líneas antes de que el primer patrón coincida y tres líneas después de la última coincidencia de patrón.

Ejemplo 9: Buscar todas las coincidencias de patrones

En este ejemplo se muestra cómo el parámetro AllMatches busca cada coincidencia de patrón en una línea de texto. De forma predeterminada, Select-String solo busca la primera aparición de un patrón en una línea de texto. En este ejemplo se usan propiedades de objeto que se encuentran con el 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

El Get-ChildItem cmdlet usa el parámetro Path . El parámetro Path usa la variable $PSHOME que especifica el directorio de PowerShell. El resto de la ruta de acceso incluye el subdirectorio en-US y especifica cada *.txt archivo del directorio. Los Get-ChildItem objetos se almacenan en la $A variable . La $A variable se envía a la canalización al Select-String cmdlet . Select-String usa el parámetro Pattern para buscar en cada archivo la cadena de PowerShell.

En la línea de comandos de PowerShell, se muestra el contenido de la $A variable. Hay una línea que contiene dos apariciones de la cadena de PowerShell.

La $A.Matches propiedad enumera la primera aparición del patrón de PowerShell en cada línea.

La $A.Matches.Length propiedad cuenta la primera aparición del patrón de PowerShell en cada línea.

La $B variable usa los mismos Get-ChildItem cmdlets y Select-String , pero agrega el parámetro AllMatches . AllMatches busca cada aparición del patrón powerShell en cada línea. Los objetos almacenados en las $A variables y $B son idénticos.

La $B.Matches.Length propiedad aumenta porque, para cada línea, se cuenta cada aparición del patrón de PowerShell .

Parámetros

-AllMatches

Indica que el cmdlet busca más de una coincidencia en cada línea de texto. Sin este parámetro, Select-String solo busca la primera coincidencia en cada línea de texto.

Cuando Select-String encuentra más de una coincidencia en una línea de texto, sigue emitiendo solo un objeto MatchInfo para la línea, pero la propiedad Matches del objeto contiene todas las coincidencias.

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

-CaseSensitive

Indica que las coincidencias del cmdlet distinguen mayúsculas de minúsculas. De forma predeterminada, las coincidencias no distinguen mayúsculas de minúsculas.

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

-Context

Captura el número especificado de líneas antes y después de la línea que coincide con el patrón.

Si escribe un número como valor de este parámetro, ese número determina el número de líneas que se capturan antes y después de la coincidencia. Si escribe dos números como valor, el primer número determina el número de líneas antes de la coincidencia y el segundo número determina el número de líneas después de la coincidencia. Por ejemplo, -Context 2,3.

En la pantalla predeterminada, las líneas con una coincidencia se indican mediante un corchete angular derecho () (>ASCII 62) en la primera columna de la pantalla. Las líneas sin marcar son el contexto.

El parámetro Context no cambia el número de objetos generados por Select-String. Select-String genera un objeto MatchInfo para cada coincidencia. El contexto se almacena como una matriz de cadenas en la propiedad Context del objeto .

Cuando la salida de un Select-String comando se envía por la canalización a otro Select-String comando, el comando receptor busca solo el texto de la línea coincidente. La línea coincidente es el valor de la propiedad Line del objeto MatchInfo , no el texto de las líneas de contexto. Como resultado, el parámetro Context no es válido en el comando receptor Select-String .

Cuando el contexto incluye una coincidencia, el objeto MatchInfo para cada coincidencia incluye todas las líneas de contexto, pero las líneas superpuestas aparecen solo una vez en la pantalla.

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

-Encoding

Especifica el tipo de codificación del archivo de destino. El valor predeterminado es Default.

Los valores aceptables para este parámetro son los siguientes:

  • ASCII Usa juego de caracteres ASCII (7 bits).
  • BigEndianUnicode Usa UTF-16 con el orden de bytes big-endian.
  • Predeterminado Usa la codificación que corresponde a la página de códigos activa del sistema (normalmente ANSI).
  • OEM Usa la codificación que corresponde a la página de códigos oem actual del sistema.
  • Unicode Usa UTF-16 con el orden de bytes little-endian.
  • UTF7 Usa UTF-7.
  • UTF8 Usa UTF-8.
  • UTF32 Usa UTF-32 con el orden 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

Excluye los elementos especificados. El valor de este parámetro califica el parámetro Path. Escriba un elemento o patrón de ruta de acceso, como *.txt. Se permiten los caracteres comodín.

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

-Include

Incluye los elementos especificados. El valor de este parámetro califica el parámetro Path. Escriba un elemento o patrón de ruta de acceso, como *.txt. Se permiten los caracteres comodín.

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

-InputObject

Especifica el texto que se va a buscar. Especifique una variable que contenga el texto, o escriba un comando o una expresión que obtenga el texto.

El uso del parámetro InputObject no es el mismo que el envío de cadenas hacia abajo de la canalización a Select-String.

Al canalizar más de una cadena al Select-String cmdlet, busca el texto especificado en cada cadena y devuelve cada cadena que contiene el texto de búsqueda.

Cuando se usa el parámetro InputObject para enviar una colección de cadenas, Select-String trata la colección como una sola cadena combinada. Select-String devuelve las cadenas como una unidad si encuentra el texto de búsqueda en cualquier cadena.

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

-List

Solo se devuelve la primera instancia de texto coincidente de cada archivo de entrada. Esta es la manera más eficaz de recuperar un archivo de lista que tenga contenido que coincida con la expresión regular.

De forma predeterminada, Select-String devuelve un objeto MatchInfo para cada coincidencia que encuentra.

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

-LiteralPath

Especifica la ruta de acceso a los archivos en los que se va a buscar. El valor del parámetro LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape. Para obtener más información, consulte about_Quoting_Rules.

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

-NotMatch

El parámetro NotMatch busca texto que no coincide con el patrón especificado.

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

-Path

Especifica la ruta de acceso a los archivos que se van a buscar. Se permiten los caracteres comodín. La ubicación predeterminada es el directorio local.

Especifique los archivos en el directorio, como log1.txt, *.doco *.*. Si solo especifica un directorio, se produce un error en el comando.

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

-Pattern

Especifica el texto que se va a buscar en cada línea. Escriba una cadena o expresión regular. Si escribe una cadena, use el parámetro SimpleMatch .

Para obtener información sobre las expresiones regulares, consulte about_Regular_Expressions.

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

-Quiet

Indica que el cmdlet devuelve un valor booleano (True o False), en lugar de un objeto MatchInfo . El valor es True si se encuentra el patrón; de lo contrario, el valor es False.

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

-SimpleMatch

Indica que el cmdlet usa una coincidencia simple en lugar de una coincidencia de expresión regular. En una coincidencia simple, Select-String busca la entrada del texto en el parámetro Pattern . No interpreta el valor del parámetro Pattern como una instrucción de expresión regular.

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

Entradas

PSObject

Puede canalizar cualquier objeto que tenga un método ToString a Select-String.

Salidas

Microsoft.PowerShell.Commands.MatchInfo or System.Boolean

De forma predeterminada, la salida es un conjunto de objetos MatchInfo con uno para cada coincidencia encontrada. Si usa el parámetro Quiet , la salida es un valor booleano que indica si se encontró el patrón.

Notas

Select-String es similar a grep en UNIX o findstr.exe en Windows.

El alias sls del Select-String cmdlet se introdujo en PowerShell 3.0.

Nota

Según verbos aprobados para comandos de PowerShell, el prefijo de alias oficial para Select-* cmdlets es sc, no sl. Por lo tanto, el alias adecuado para Select-String debe ser scs, no sls. Se trata de una excepción a esta regla.

Para usar Select-String, escriba el texto que desea buscar como el valor del parámetro Pattern . Para especificar el texto que se va a buscar, use los criterios siguientes:

  • Escriba el texto de una cadena entre comillas y, a continuación, canalítelo a Select-String.
  • Almacene una cadena de texto en una variable y, a continuación, especifique la variable como el valor del parámetro InputObject .
  • Si el texto se almacena en archivos, use el parámetro Path para especificar la ruta de acceso a los archivos.

De forma predeterminada, Select-String interpreta el valor del parámetro Pattern como una expresión regular. (Para obtener más información, consulte about_Regular_Expressions. Puede usar el parámetro SimpleMatch para invalidar la coincidencia de expresiones regulares. El parámetro SimpleMatch busca instancias del valor del parámetro Pattern en la entrada.

La salida predeterminada de Select-String es un objeto MatchInfo , que incluye información detallada sobre las coincidencias. La información del objeto es útil cuando se busca texto en archivos, ya que los objetos MatchInfo tienen propiedades como Filename y Line. Cuando la entrada no procede del archivo, el valor de estos parámetros es InputStream.

Si no necesita la información en el objeto MatchInfo , use el parámetro Quiet . El parámetro Quiet devuelve un valor booleano (True o False) para indicar si encontró una coincidencia, en lugar de un objeto MatchInfo .

Al buscar frases coincidentes, Select-String usa la referencia cultural actual establecida para el sistema. Para buscar la referencia cultural actual, use el cmdlet Get-Culture.

Para buscar las propiedades de un objeto MatchInfo , escriba el siguiente comando:

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