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 comandoSelect-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 objetoMatchInfo
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 objetoMatchInfo
emitido para incluir una nueva propiedad Context que contiene las líneas especificadas.Select-String
a otra llamadaSelect-String
, el contexto no estará disponible ya que solo estamos buscando en la única propiedad de línea resultanteMatchInfo
.Cultura
: se usa con el parámetroSimpleMatch
, especifica una cultura para que coincida con el patrón especificado. Este parámetro incluye opciones como ejemplosen-US
,es
ofr-FR
.
Las opciones Ordinal
e Invariante
son dos posibilidades más útiles.
Ordinal
se usa para comparaciones binarias no lingüísticas, mientras queInvariante
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 esutf8NoBOM
. La opciónCodificació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.ASCII
: este parámetro utiliza la codificación para el conjunto de caracteres ASCII (7 bits).bigendianunicode
: este parámetro codifica en formato UTF-16 usando el orden de bytes big-endian.OEM
: este parámetro utiliza la codificación predeterminada para MS-DOS y programas de consola.Unicode
: Este parámetro codifica en formato UTF-16 utilizando el orden de bytes little-endian.utf7
: Este parámetro codifica en formato UTF-7.utf8
: este parámetro codifica en formato UTF-8.utf8BOM
: Este parámetro codifica en formato UTF-8 con Byte Order Mark (BOM)tf8NoBOM
: codifica en formato UTF-8 sin marca de orden de bytes (BOM)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ámetroIncluir
, al igual que el parámetroExcluir
, 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 aSelect-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 objetoMatchInfo
devuelto está vacío. -
Raw
: este parámetro genera las cadenas coincidentes sin un objetoMatchInfo
. 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn