Cadena dividida de PowerShell: un tutorial completo
Microsoft PowerShell es una poderosa herramienta para automatizar tareas y administrar sistemas. Una de las tareas más comunes en PowerShell es la manipulación de cadenas. La manipulación de cadenas implica varias operaciones, como dividir, unir y analizar cadenas. En esta guía, lo guiaré a través del proceso de dividir cadenas en matrices usando PowerShell. Cubriremos los conceptos básicos de dividir cadenas, dividir cadenas por delimitador, dividir cadenas por palabra y más. Al final de esta guía, tendrá un conocimiento sólido de cómo dividir cadenas en matrices en PowerShell.
Los conceptos básicos de dividir cadenas en PowerShell
PowerShell es un lenguaje de programación y shell de línea de comandos creado sobre .NET Framework, lo que significa que tiene acceso a todas las clases y bibliotecas de .NET. Dividir cadenas es una tarea común en PowerShell. Una cadena es una secuencia de caracteres y dividir una cadena significa dividirla en partes más pequeñas. Dividir cadenas es útil cuando desea extraer información de una cadena más grande o cuando desea manipular la cadena de alguna manera.
La forma más sencilla de dividir una cadena en una matriz en PowerShell es mediante el método Split(). Este método divide una cadena en una matriz de subcadenas según un delimitador especificado y devuelve la matriz. La división de cadenas se puede lograr con la siguiente sintaxis:
string.Split(Delimiter [,MaxSubstrings] [,Options])
String -Split Delimiter [,MaxSubstrings] [,Options]
String -Split {scriptblock} [,MaxSubstrings]
-Split String
Aquí :
- El delimitador predeterminado son espacios en blanco, nueva línea y tabulación. De forma predeterminada, el carácter delimitador se omite en el resultado.
- Especifique el número de subcadenas que se producirán con el parámetro 'Max-SubStrings'.
- Utilice bloques de script para definir reglas delimitadoras.
- Opciones como SimpleMatch y RegexMatch establecen el alcance para dividir cadenas.
- Los parámetros adicionales incluyen IgnorCase, CultureInvariant, IgnorePatternWhitespace, ExplicitCapture, Singleline y Multiline.
Ejemplos de cadenas divididas en PowerShell
Exploremos cómo dividir una cadena en una matriz usando PowerShell. Para dividir una cadena en una matriz en PowerShell, puede usar el método Split de la clase String. El siguiente script divide una cadena en una serie de palabras:
$string = "Hello World!"
$string.Split()
Esto divide la cadena de entrada en una matriz de subcadenas utilizando un delimitador específico. En este ejemplo, estamos dividiendo la cadena "¡Hola mundo!" utilizando el espacio en blanco delimitador predeterminado. La función Dividir devuelve una matriz de cadenas. Producción:
Hello
World
Podemos dividir una cadena determinada en una matriz de subcadenas según un delimitador específico. He aquí un ejemplo:
$string= "apple,banana,orange"
$delimiter = ","
$array = $string.Split($delimiter)
$array
En este ejemplo, dividimos la variable de cadena según el delimitador de coma. La matriz resultante contiene tres elementos: "manzana", "plátano" y "naranja".
Puede acceder a los elementos individuales de la matriz utilizando el número de índice. Por ejemplo:
$array[0] # will return "apple"
$array[1] # will return "banana"
$array[2] # will return "orange"
Usando el operador de división de PowerShell
Otra forma de dividir cadenas en una matriz en PowerShell es mediante el operador de división de PowerShell. El operador de división, indicado por la palabra clave -split, toma una cadena y un delimitador como entrada y devuelve una matriz de subcadenas. Este operador divide una cadena en una matriz de subcadenas según un delimitador especificado y devuelve la matriz. He aquí un ejemplo:
$string = "Vanilla-Chocolate-Strawberry-Pistachio"
$delimiter = "-"
$array = $string -split $delimiter
$array
En este ejemplo, utilizamos el operador -split para dividir la cadena según el delimitador de espacios en blanco. La matriz resultante es la misma que la del ejemplo anterior.
Dividir cadenas por delimitador en PowerShell
Dividir cadenas por delimitador es una de las formas más comunes de dividir cadenas en PowerShell. Un delimitador es un carácter o caracteres que separan las partes de una cadena. Por ejemplo, en la cadena "Alice;Desarrollador;Seattle", el punto y coma es el delimitador.
Para dividir una cadena por delimitador en PowerShell, puede utilizar el método Split. Aquí hay un ejemplo:
$string = "Alice;Developer;Seattle"
$delimiter = ";"
$splitString = $string.Split($delimiter)
En este ejemplo, estamos dividiendo la cadena "Alice;Desarrollador;Seattle" usando el delimitador Split devuelve una matriz de cadenas, que almacenamos en la variable $splitString. También puede utilizar varios delimitadores:
$string = "PowerShell,is;awesome"
$delimiter = "[,;]"
$string.Split($delimiter)
Dividir y eliminar elementos vacíos
La división de cadenas en PowerShell a veces da como resultado elementos de matriz vacíos, especialmente cuando hay varios delimitadores consecutivos. Por ejemplo, si está dividiendo una cadena CSV y hay dos comas en una fila (por ejemplo, "Alice,,Bob"), el resultado incluirá un elemento vacío. A continuación se muestra un ejemplo de PowerShell que demuestra cómo dividir una cadena y eliminar los elementos vacíos:
$string = "Alice,,Bob,Charlie,,,Dave"
$delimiter = ","
$array = $string.Split($delimiter, [System.StringSplitOptions]::RemoveEmptyEntries)
$array
Alternativamente, puede utilizar la cláusula "Dónde" para eliminar elementos vacíos. Aquí es cómo:
# Sample string with double commas
$data = "Alice,,Bob,Charlie,,,Dave"
# Split the string by comma and filter out empty elements
$names = $data -split "," | Where-Object { $_ -ne "" }
# Display the results
$names
Para obtener más información sobre todas las opciones admitidas, consulte: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_split?view=powershell-7.3
Dividir cadenas en variables
A veces, es posible que desees dividir una cadena en variables directamente:
$data = "John,Doe,30"
$name, $surname, $age = $data -split ","
$name #Output: John
$SurName #Output: Doe
$Age #Output: 30
Este enfoque asigna cada parte de la cadena dividida a una variable separada, lo que agiliza sus tareas de procesamiento de datos.
Dividir cadenas palabra por palabra en PowerShell
Dividir cadenas por palabra es otra forma común de dividir cadenas en PowerShell. Cuando divides una cadena por palabra, estás dividiendo la cadena en partes más pequeñas según los espacios entre las palabras.
Para dividir una cadena por palabra en PowerShell, puede utilizar el método Split sin especificar un delimitador. Aquí hay un ejemplo:
$string = "PowerShell scripting tutorials beginner guides"
$SplitString = $string.Split()
$SplitString
En este ejemplo, estamos dividiendo la cadena “Guías para principiantes de tutoriales de secuencias de comandos de PowerShell” por palabra. Como no especificamos un delimitador, el método Split utiliza los espacios entre las palabras como delimitador. El método Split devuelve una matriz de cadenas, que almacenamos en la variable $splitString.
PowerShell
scripting
tutorials
beginner
guides
También puedes dividir palabra por palabra usando expresiones regulares. A continuación se muestra un ejemplo: supongamos que recibió comentarios de un usuario. Para realizar una forma básica de análisis de texto, decide dividir cada comentario palabra por palabra para contar la frecuencia de ciertas palabras clave.
# Sample user feedback
$feedback = "I love the new update on settings! However, I did notice a minor glitch with the settings page due to this update. Please look into it."
# Splitting the feedback word by word
$words = $feedback -split "\W+" # \W+ regex pattern splits by non-word characters
# Count specific keywords
$updateCount = ($words | Where-Object { $_ -eq "update" }).Count
$settingsCount = ($words | Where-Object { $_ -eq "settings" }).Count
# Display the results
Write-Output "Update Count: $updateCount"
Write-Output "Settings Count: $settingsCount"
Cuando ejecute el script, mostrará el recuento de las palabras clave especificadas, lo que le permitirá medir la frecuencia de ciertos temas en los comentarios.
Dividir cadenas en matrices en PowerShell
Dividir cadenas en matrices en PowerShell es una técnica útil para trabajar con cadenas. Cuando divide una cadena en una matriz, puede manipular las partes individuales de la cadena por separado.
Para dividir una cadena en una matriz en PowerShell, puede utilizar el método Split. Aquí hay un ejemplo:
$string = "John,Doe,30"
$delimiter = ","
$splitString = $string.Split($delimiter)
En este ejemplo, estamos dividiendo la cadena "John,Doe,30" en una matriz usando el delimitador ,. El método Split devuelve una matriz de cadenas, que almacenamos en la variable $splitString.
Uso de ForEach para dividir cadenas en matrices en PowerShell
El bucle ForEach es una poderosa construcción en PowerShell que le permite iterar sobre una matriz y realizar una acción en cada elemento. Puede utilizar el bucle ForEach para dividir una cadena en una matriz y luego manipular las partes individuales de la cadena por separado.
Aquí hay un ejemplo:
$string = "John,Doe,30"
$delimiter = ","
$splitString = $string.Split($delimiter)
ForEach ($part in $splitString) {
Write-Output $part
}
En este ejemplo, primero dividimos la cadena "John,Doe,30" en una matriz usando el delimitador ,. Luego usamos el bucle ForEach para iterar sobre cada elemento de la matriz y enviarlo a la consola.
Analizar y extraer valores de archivos CSV en PowerShell
El caso de uso para el análisis de cadenas es el procesamiento de datos CSV (valores separados por comas). Los archivos CSV suelen contener filas de datos que deben dividirse en campos individuales. Por ejemplo, es posible que tengas un archivo CSV con los siguientes datos:
Name,Age,Email
John,30,john@example.com
Jane,25,jane@example.com
Para dividir cada fila en una serie de campos, puede dividir cada línea por el carácter de coma:
$csvLines = Get-Content -Path "C:\data\file.csv"
$data = foreach ($line in $csvLines) {
$line -split ","
}
En este ejemplo, el cmdlet Get-Content se utiliza para leer el archivo CSV y almacenar cada línea en la variable $csvLines. El bucle foreach luego itera sobre cada línea, la divide por el carácter de coma y almacena la matriz de campos resultante en la matriz $data.
Dividir cadenas en matrices usando expresiones regulares en PowerShell
Las expresiones regulares proporcionan una forma eficaz de dividir cadenas en matrices en PowerShell. Una expresión regular es una secuencia de caracteres que define un patrón de búsqueda. El operador -split de PowerShell admite expresiones regulares como delimitadores, lo que le permite dividir cadenas según patrones complejos. Por ejemplo, el siguiente código divide una cadena por cualquier número de espacios o tabulaciones consecutivas:
$myString = "apple banana cherry"
$myArray = $myString -split "\s+"
En este ejemplo, la cadena "manzana, plátano y cereza" se divide en tres subcadenas: "manzana", "plátano" y "cereza". La matriz resultante, $myArray, contiene estas tres subcadenas. Las expresiones regulares se pueden utilizar para dividir cadenas según cualquier patrón o condición personalizada. Aquí, “\s+” denota uno o más caracteres de espacio en blanco. Consideremos otro ejemplo: tiene una cadena con nombres y cantidades de productos mixtos. Quiere obtener los nombres de los productos de la cadena:
$shipmentData = "Laptop45Charger32Mouse12Keyboard5"
$products = $shipmentData -split '\d+'
$products
Producción:
Laptop
Charger
Mouse
Keyboard
Esta flexibilidad hace que las expresiones regulares sean una herramienta poderosa para analizar cadenas en matrices en PowerShell.
Dividir cadenas con varios caracteres o por una palabra
Si bien el operador de división, las expresiones regulares y otros métodos cubiertos hasta ahora pueden manejar la mayoría de los escenarios de división de cadenas, algunos casos especiales requieren consideración adicional. Uno de esos casos es dividir cadenas con varios caracteres como delimitador. Para dividir una cadena con varios caracteres como delimitador, puede utilizar el operador -split con una expresión regular que coincida con el delimitador deseado. Por ejemplo, la siguiente cadena contiene una lista de ingredientes para una receta y cada ingrediente está separado por la palabra "Y".
$Recipe = "Flour 200g AND Sugar 150g AND Eggs 3 AND Vanilla Extract 1 tsp"
$ingredients = $Recipe -split "AND"
Foreach ($ingredient in $ingredients) {
Write-Output $ingredient.Trim()
}
El resultado:
Flour 200g
Sugar 150g
Eggs 3
Vanilla Extract 1 tsp
Aquí hay otro ejemplo:
$productInfo = "ProductName: Laptop DETAIL Price: AED-1000 DETAIL Warranty: 2 years DETAIL"
$details = $productInfo -split "DETAIL"
foreach ($detail in $details) {
Write-Output $detail.Trim()
}
Producción :
ProductName: Laptop
Price: AED-2000
Warranty: 2 years
Dividir una cadena por un carácter de nueva línea
Para dividir una cadena mediante saltos de línea, puede utilizar la secuencia de escape \r\n como delimitador. Por ejemplo, el siguiente código divide una cadena en nuevas líneas:
$myString = "Line 1`r`nLine 2`r`nLine 3"
$myArray = $myString -split "\r\n"
En este ejemplo, la cadena con caracteres de nueva línea se divide en tres subcadenas: "Línea 1", "Línea 2" y "Línea 3". La matriz resultante, $myArray, contiene estas tres subcadenas. Aquí hay otro ejemplo:
# Multiline string example
$multilineText = @"
This is line 1
This is line 2
This is line 3
This is line 4
"@
# Split the multiline string into individual lines
$Lines = $multilineText -split "`r`n"
$i=1
# Process each line (for demonstration, we'll just print each line with a prefix)
ForEach ($Line in $Lines) {
Write-host "Processed Line# $i : " +$Line
$i++
}
También puedes leer desde un archivo de texto y dividir línea por línea:
$LogData = Get-Content "C:\Temp\AppLog.txt"
$Entries = $LogData -split "`n"
De manera similar, puede dividir una cadena según cualquier carácter de escape, como una tabulación.
$string = "Value1`tValue2`tValue3"
$splitArray = $string.Split("`t")
$splitArray
El cmdlet de ruta dividida en PowerShell
Puede dividir cadenas de ruta en matrices utilizando un carácter separador de ruta “\”. Por ejemplo, el siguiente código divide una cadena por el carácter de barra invertida:
$Path= "C:\Program Files\Microsoft"
$myArray = $Path -Split "\\"
En este ejemplo, la cadena "C:\Program Files\Microsoft" se divide en cuatro subcadenas: "C:", "Program Files" y "Microsoft". La matriz resultante, $myArray, contiene estas cuatro subcadenas. ¿Qué sucede si desea obtener el nombre del archivo o carpeta o la carpeta principal en una ruta? Bueno, aquí es donde Split-Path puede resultar útil.
Split-Path es un cmdlet útil en PowerShell que proporciona la funcionalidad de separar la hoja (a menudo el nombre del archivo o el último nombre de la carpeta) de su ruta principal. Es especialmente útil cuando se trabaja con rutas de archivos o directorios.
$LogFilePath = "C:\Temp\Logs\AppLog.txt"
#Get Parent Folder - C:\Temp\Logs
$Directory = Split-Path -Path $LogFilePath -Parent
Write-Output $Directory
#Get File Name - AppLog.txt
$Filename = Split-Path -Path $LogFilePath -Leaf
Write-Output $Filename
El cmdlet Split-Path es particularmente útil cuando se trabaja con rutas de archivos o rutas de directorios en PowerShell.
Técnicas avanzadas en PowerShell Split String
Además de los métodos anteriores, se pueden utilizar otras técnicas avanzadas para dividir cadenas en matrices. Por ejemplo, puede incluir el delimitador en el resultado, dividir los caracteres de la cadena en una matriz, limitar el número de subcadenas, hacer una división que distinga entre mayúsculas y minúsculas y utilizar la coincidencia de expresiones regulares (RegEx) para dividir cadenas según patrones más complejos.
Incluir delimitador en el resultado
De forma predeterminada, el método Split eliminará los caracteres delimitadores de la matriz resultante. Si desea conservar los caracteres delimitadores en la matriz resultante, puede colocar los delimitadores entre paréntesis. Por ejemplo:
$string = "apple;banana,orange"
$array = $string -split "(;|,)"
Esto creará una matriz con cinco elementos: "apple", ";", "banana", ", y
Dividir una cadena en una matriz de caracteres
Para dividir una cadena en caracteres individuales, use:
$string = "AEIOU"
$characters = $string.ToCharArray()
$characters
Limitar el número de subcadenas resultantes
Puede utilizar el parámetro "-Maxsubstrings" para limitar el número máximo de subcadenas al dividir una cadena. Así es como funciona:
$String = "one,two,three,four,five"
$string -split ",", 3
#Result:
#one
#two
#three,four,five
Aquí,
- La cadena se divide en las dos primeras apariciones de coma porque hemos establecido el parámetro
MaxSubstringsen 3. - La tercera subcadena (la última) contendrá el resto de la cadena después de las dos primeras divisiones, incluso si incluye más delimitadores.
Esto es particularmente útil cuando solo está interesado en procesar los primeros campos de una cadena delimitada o cuando desea manejar el resto de una cadena como una entidad única después de un cierto número de divisiones.
Uso de los parámetros SimpleMatch e IgnoreCase
El parámetro SimpleMatch indica a PowerShell que busque un punto (.) y no ningún carácter. IgnoreCase: le indica al operador que divida independientemente del carácter entre mayúsculas y minúsculas.
$FQDN = "fileserver.corp.crescent.com"
$Parts = $FQDN -split ".",0,"SimpleMatch","IgnoreCase"
$Parts
División que distingue entre mayúsculas y minúsculas
Suponga que tiene una cadena en la que utiliza mayúsculas y minúsculas de la palabra "Y" como delimitadores. Sin embargo, solo desea dividir la cadena usando el "Y" mayúsculo mientras mantiene intacto el "y" minúsculo. Así es como puede utilizar el operador CSplit:
# Sample user feedback
$feedback = "I suggest adding a dark mode AND improving the search function. The mobile app crashes often and needs fixing AND please add a tutorial for new users."
# Splitting the feedback case-sensitively at "AND"
$suggestions = $feedback -csplit "AND"
# Display each suggestion separately
$suggestions | ForEach-Object { Write-Output "Suggestion: $_" }
Terminando
En esta guía, cubrimos los conceptos básicos de la división de cadenas en PowerShell. Aprendimos cómo dividir cadenas usando el método Split(), el operador -split, dividir cadenas por delimitador, dividir cadenas por palabra, dividir cadenas en matrices, usar ForEach para dividir cadenas en matrices y usar consejos y trucos para dividir cadenas de manera eficiente. . Dividir cadenas es sólo una de las muchas características que hacen de PowerShell una herramienta eficiente y eficaz para manipular datos. Estas técnicas son útiles para procesar y manipular datos en sus scripts de PowerShell. Al comprender los conceptos básicos de la división de cadenas en PowerShell y utilizar expresiones regulares, puede ahorrar tiempo y esfuerzo al trabajar con grandes conjuntos de datos.


