Use los cmdlets de PowerShell para aprender lo básico: cómo recuperar texto de archivos de texto y cómo encontrar texto en archivos de texto.
Una de las tareas más frecuentes que un profesional de TI debe hacer es crear, leer o cambiar archivos de texto de alguna manera. Los archivos de texto están representados en miles de formatos diferentes, desde simples archivos TXT hasta XML y varios formatos propietarios. Dado que los archivos de texto pueden estructurarse de tantas maneras, los proveedores han adoptado el archivo de texto simple como medio para definir scripts, almacenar valores de configuración y consultas SQL y mucho más. La única diferencia estructural entre un archivo TXT y un archivo SQL, por ejemplo, es sólo la extensión del archivo. El contenido es sólo texto estructurado de una manera diferente, predefinida.
PowerShell tiene muchas maneras diferentes de gestionar todos estos tipos de archivos de texto, pero en este artículo vamos a seguir con el enfoque más genérico: Nos centraremos en la lectura y el texto no estructurado. Esto significa que no hay archivos XML, ni archivos de consulta SQL, ni siquiera scripts de PowerShell. Nos centraremos en dos temas:
- Cómo recuperar texto de archivos de texto.
- Cómo encontrar texto en archivos de texto.
Cómo recuperar texto de archivos de texto
Una de las tareas más fáciles es recuperar todo el texto de un archivo de texto existente. Para la mayoría de los archivos de texto, un scripter de PowerShell puede utilizar el cmdlet Get-Content. El cmdlet Get-Content es un cmdlet de PowerShell muy popular que recuperará todo el texto de un archivo de texto especificado por el parámetro Path.
En su forma más sencilla, puede pasar el parámetro Path con la ruta de acceso a un archivo de texto como argumento al cmdlet Get-Content. Digamos que tengo un archivo llamado MiTexto.txt. En este archivo de texto tengo las tres líneas que se muestran a continuación y me gustaría obtener el contenido de MiTexto.txt con un script de PowerShell.
Para ello, puedo utilizar Get-Content con el parámetro Path.
Verás que el resultado fue todo el contenido de MiTexto.txt. Pero, ¿qué pasa si sólo quieres ver un número de línea en particular? Por defecto, Get-Content lee cada línea de un archivo de texto y crea un array como salida con cada línea del texto como un elemento de ese array. Esto significa que puedo seleccionar fácilmente los diferentes elementos de esa matriz especificando el número de índice de la misma. En este caso, el número de índice del array es igual al número de línea del archivo de texto.
En el ejemplo anterior, estoy mostrando que el resultado de Get-Content es un tipo de System.Array y que mediante el uso de números de índice entre paréntesis puedo escoger y elegir qué líneas quiero que salgan en mi consola. Una cosa a tener en cuenta es que si no estás familiarizado con los arrays y su esquema de numeración, el primer elemento de un array comienza con un cero. Por eso puedo usar el número uno para elegir la segunda línea y el número dos para elegir la tercera línea. Esto es importante para recordar.
Cómo encontrar texto en archivos de texto
Una vez que usted es capaz de averiguar cómo encontrar todo el texto en los archivos de texto o ciertos números de línea, otra tarea popular es encontrar texto específico dentro de los propios archivos. Hay varias formas de hacerlo, pero la más sencilla es utilizar el cmdlet Where-Object. El cmdlet Where-Object es un popular cmdlet que permite «filtrar» diversa información de la salida de otros cmdlets; en este ejemplo, está filtrando información del cmdlet Get-Content.
Usando nuestro archivo de texto anterior como ejemplo, digamos que quiero ver si ese archivo de texto contiene las palabras «archivo de texto» juntas en él. Para ello, utilizaré Where-Object.
Cuando utilice Where-Object debo utilizar la variable $_. Se trata de una variable especial en PowerShell conocida como variable pipeline. En este ejemplo, representa cada línea del archivo de texto tal y como viene de Get-Content. A continuación, estoy utilizando el operador similar y utilizando comodines para ver si la cadena «archivo de texto» existe en cualquiera de las líneas del archivo de texto. Parece que encontró dos líneas que coinciden con la cadena.
Si quieres aprender más sobre cómo encontrar texto en archivos de texto te sugiero que mires los operadores de comparación de PowerShell. El uso del operador match, por ejemplo, utiliza regex, que es mucho más potente que el operador like y te permite encontrar casi cualquier patrón que se te ocurra en un archivo de texto.