A common scenario in an admin’s world is to figure out a way to find a certain snippet of text inside a string; called the substring. PowerShell makes finding a substring extremely easy.
Relacionado: Aprende el Formato de Cadena y la Expansión de Cadenas
Anunciando una formación EN VIVO gratuita – Iniciando tu viaje con PowerShell – presentado por Johan Arwidmark. Comprende cómo las habilidades de PowerShell mejoran tu carrera de TI, aprende por dónde empezar con PowerShell, crea tus primeros scripts y haz preguntas directamente a Johan en un entorno de formación en vivo.
PowerShell y Cadenas
En el mundo de PowerShell, una cadena consta de un conjunto de caracteres encerrados entre comillas simples o dobles. Cadenas como "foo"
y 'bar'
son extremadamente comunes.
Relacionado: Vuelta a lo Básico: Cadenas en PowerShell
Supongamos que has definido una cadena en una variable y solo necesitas encontrar una parte de ella. Por ejemplo, digamos que tienes una cadena con una dirección como 1234 4th St. Quieres extraer el número y sabes que los primeros cuatro caracteres siempre serán el número que necesitas. En este caso, puedes usar el método Substring()
de PowerShell.
Usando el Método SubString de PowerShell
Para encontrar una cadena dentro de otra cadena con PowerShell, puedes usar el método Substring()
. Este método se encuentra en cada objeto de cadena en PowerShell.
Por ejemplo, quizás tengas una cadena como El rápido zorro marrón saltó sobre la cerca.
y desees encontrar los primeros cinco caracteres. Puedes hacerlo utilizando el método Substring()
de la siguiente manera:
El primer argumento que debes pasar al método Substring()
es la posición del carácter más a la izquierda. En este caso, el carácter más a la izquierda es T
. El segundo argumento es la posición del carácter más a la derecha. En este caso, el carácter es q
.
El método Substring()
devuelve todos los caracteres que se encuentran entre ellos.
Aquí tienes un ejemplo del mundo real:
Imaginemos que tenemos un código de producto con el siguiente formato: XXXXVVVV-MM-DD-AAAA
. Todos los productos tienen este formato de código y nunca se desvían de él. Ahora supongamos que el software de gestión de inventario que generó este código no incluyó un campo de fecha de creación en la base de datos.
No obstante, el software siempre colocaba esta fecha como MM-DD-AAAA
en el propio código del producto, por lo que podemos inferir esto del código del producto. Necesitamos obtener esta fecha para nuestros productos y crear un informe súper elegante pero extremadamente innecesario para mostrar a la gerencia cuándo se insertó cada producto en la base de datos. Aquí hay una buena manera de hacerlo.
En este ejemplo, estamos utilizando el método SubString()
de PowerShell para el objeto de cadena inherente y pasando el número del primer carácter que queremos encontrar como parámetro.
Desde que no estamos especificando el carácter de detención, asume que queremos todos los caracteres hasta el final de la cadena. Para encontrar el número en primer lugar, primero obtenemos la longitud del código de producto completo y simplemente restamos 10 de eso. En este ejemplo, esto significa que queremos comenzar en el décimo carácter desde la derecha de la cadena y todo a la derecha de eso.
El tipo [DateTime]
no necesariamente se relaciona con el tema de la subcadena del mensaje, pero pensé que encajaría bien con el ejemplo específico.
Después de obtener nuestra cadena de 11-12-2013, la convertimos a un objeto [DateTime]
, que convierte lo que antes era una cadena sin sentido en un objeto agradable. A partir de aquí, podemos realizar toda la gestión de aritmética de fechas elegante que se espera y generar ese informe elegante de gráfico de barras.
Encontrar Dinámicamente una Subcadena Usando la Propiedad de Longitud
En el ejemplo anterior, estabas definiendo estáticamente las posiciones de inicio y fin de los caracteres dentro de la cadena. Pero, ¿qué pasa si no conoces la última posición?
Tal vez necesitas encontrar la subcadena desde los últimos cuatro caracteres. Necesitas encontrar el conjunto de caracteres desde la cuarta posición hasta el final. La cadena en la que estás buscando podría tener cualquier longitud.
En lugar de definir la posición de fin como un número positivo que cuenta desde la izquierda, podemos especificar dinámicamente la posición de fin usando la longitud de la cadena y restando cierto número de caracteres.
Usando la cadena anterior `$product_code = ‘ABCD1234-11-12-2013’`, tal vez quieras encontrar los últimos cuatro caracteres. En lugar de hacer algo como esto:
Puedes reemplazar 0
con $product_code.Length - 4
y ni siquiera usar la posición final en absoluto, y devolverá los últimos cuatro caracteres como se muestra a continuación.
Si no especificas la posición final, el método de subcadena de PowerShell siempre se establecerá por defecto en la última posición de carácter.
Usando la propiedad length
de la cadena, que es el número total de caracteres en la cadena y deduciéndolo de ese recuento, te permite seleccionar dinámicamente subcadenas.
Anunciando una formación en vivo gratuita – Comenzando tu viaje con PowerShell – presentada por Johan Arwidmark. Entiende cómo las habilidades de PowerShell mejoran tu carrera en TI, aprende por dónde empezar con PowerShell, construye tus primeros scripts y haz preguntas directamente a Johan en un entorno de formación en vivo.