Selección de varios patrones en una cadena con PowerShell

  1. Introducción al comando Select-String en Windows
  2. Use el cmdlet Select-String en Windows PowerShell
Selección de varios patrones en una cadena con PowerShell

PowerShell tiene un comando similar al grep de Linux que busca un patrón de cadena y lo muestra como salida en la línea de comando. Este artículo analiza qué cmdlet cumple su función de buscar patrones de cadena específicos mediante Windows PowerShell.

Introducción al comando Select-String en Windows

El comando grep en Linux es comparable al comando Select-String en Windows. El cmdlet busca la primera coincidencia en cada línea de forma predeterminada y luego muestra el nombre del archivo, el número de línea y el texto dentro de la cadena coincidente.

El comando Seleccionar cadena también puede funcionar con múltiples codificaciones de archivos, como texto Unicode, determinando el formato de codificación utilizando la marca de orden de bytes (BOM). Select-String pensará que es un archivo UTF8 si falta la lista de materiales.

Parámetros de Select-String

  • AllMatches: por lo general, el comando Select-String solo buscará la primera coincidencia en cada línea; sin embargo, el cmdlet buscará más de una coincidencia con este parámetro. El parámetro aún emitirá un solo objeto MatchInfo para cada línea, que contiene todas las coincidencias encontradas.
  • CaseSensitive: las coincidencias de cadenas no distinguen entre mayúsculas y minúsculas de forma predeterminada. Este parámetro obliga al cmdlet a buscar coincidencias precisas con el patrón de entrada.
  • Contexto: un parámetro en el que podemos definir el número de líneas antes y después de la coincidencia que mostrará el parámetro. Al agregar este parámetro, se modifica el objeto MatchInfo emitido para incluir una nueva propiedad Context que contiene las líneas especificadas.
  • Select-String a otra llamada Select-String, el contexto no estará disponible ya que solo estamos buscando en la única propiedad de línea resultante MatchInfo.
  • Cultura: se usa con el parámetro SimpleMatch, especifica una cultura para que coincida con el patrón especificado. Este parámetro incluye opciones como ejemplos en-US, es o fr-FR.

Las opciones Ordinal e Invariante son dos posibilidades más útiles.

  • Ordinal se usa para comparaciones binarias no lingüísticas, mientras que Invariante se usa para comparaciones de culturas independientes. Este parámetro debutó en PowerShell 7 y no estaba presente en versiones anteriores.

Tenga en cuenta que esto utilizará la cultura actual del sistema, que podemos determinar usando el comando Get-Culture.

  • Codificación: especifica la codificación del archivo de destino para buscar, cuyo valor predeterminado es utf8NoBOM. La opción Codificación ahora toma ID numéricos de páginas de códigos registradas o nombres de cadenas, como windows-1251, a partir de PowerShell Core 6.2.

    1. ASCII: este parámetro utiliza la codificación para el conjunto de caracteres ASCII (7 bits).
    2. bigendianunicode: este parámetro codifica en formato UTF-16 usando el orden de bytes big-endian.
    3. OEM: este parámetro utiliza la codificación predeterminada para MS-DOS y programas de consola.
    4. Unicode: Este parámetro codifica en formato UTF-16 utilizando el orden de bytes little-endian.
    5. utf7: Este parámetro codifica en formato UTF-7.
    6. utf8: este parámetro codifica en formato UTF-8.
    7. utf8BOM: Este parámetro codifica en formato UTF-8 con Byte Order Mark (BOM)
    8. tf8NoBOM: codifica en formato UTF-8 sin marca de orden de bytes (BOM)
    9. utf32: Codifica en formato UTF-32.
  • Excluir: con el parámetro Ruta, excluya elementos específicos utilizando un patrón, como *.txt.

  • Incluir: el parámetro Incluir, al igual que el parámetro Excluir, solo incluirá entradas que coincidan con un patrón, como *.csv.

  • Lista: este parámetro devuelve la primera instancia de texto coincidente de cada archivo de entrada. Este parámetro pretende ser una forma rápida y eficiente de recuperar una lista de archivos con contenidos coincidentes.

  • LiteralPath le dice a Select-String que use los valores como entrada en lugar de interpretar valores como * como un comodín. Si la ruta incluye caracteres de escape, escríbalos entre comillas simples para no analizarlos.

  • NoEmphasis – Este parámetro deshabilita el resaltado de coincidencias. El parámetro Énfasis utiliza colores negativos basados en los colores de fondo del texto.

  • NotMatch: este parámetro busca texto que no coincida con el patrón especificado.

  • Ruta: este parámetro especifica la ruta a los archivos que se van a buscar. Podemos usar comodines, pero no podemos simplemente especificar un directorio.

    El directorio local es el predeterminado.

  • Patrón: este parámetro especifica el patrón para buscar el contenido de entrada o archivos basados en expresiones regulares.

  • SimpleMatch: en lugar de expresiones regulares, este parámetro utiliza una coincidencia básica. Debido a que no se utiliza ninguna expresión regular, el campo Coincidencias del objeto MatchInfo devuelto está vacío.

  • Raw: este parámetro genera las cadenas coincidentes sin un objeto MatchInfo. Este comportamiento es más similar a grep y no a la naturaleza más orientada a objetos de PowerShell.

  • Quiet: solo devuelve un valor booleano de $true o $false si se encuentra el patrón.

Use el cmdlet Select-String en Windows PowerShell

Veamos ejemplos y veamos cómo podemos aprovechar Select-String para facilitar la búsqueda de coincidencias de texto. Comenzando con un ejemplo sencillo, busquemos John en un puñado de archivos CSV.

Código de ejemplo:

Select-String -Path "PS\*.csv" -Pattern "John"

Producción :

PS\user1.csv:3:John,Doe,jdoe@test.com,Male
PS\user2.csv:5:John,Johnson,jjohnson@abccompany.com,Male

También podemos ver las propiedades de visualización de cada salida.

Código de ejemplo:

Select-String -Path "Users\*.csv" -Pattern "John" | Select-Object * -First 1

Producción :

IgnoreCase : True
LineNumber : 3
Line       : John,Doe,jdoe@test.com,Male
Filename   : user1.csv
Path       : C:\Temp\PS
Pattern    : John
Context    :
Matches    : {2}

Si queremos buscar varios patrones, podemos separar los valores de los parámetros con una coma debajo del parámetro Patrón.

Código de ejemplo:

Select-String -Path "Users\*.csv" -Pattern "John", "Henry", "Jonathan"
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artículo relacionado - PowerShell String