Cómo verificar si un archivo contiene una cadena específica usando PowerShell

  1. Verificar si un Archivo Contiene una Cadena Específica Usando Select-String en PowerShell
  2. Verificar si un Archivo Contiene una Cadena Específica Usando Get-Content en PowerShell
  3. Verificar Múltiples Archivos que Contienen una Cadena Específica
  4. Conclusión
Cómo verificar si un archivo contiene una cadena específica usando PowerShell

Buscar una cadena específica dentro de un archivo de texto es una tarea común al trabajar con Windows PowerShell. Mientras que los entornos Unix y Linux cuentan con el confiable comando grep, PowerShell ofrece un enfoque alternativo utilizando los cmdlets Select-String, Get-Content y Get-ChildItem.

En este artículo, exploraremos varios métodos sobre cómo usar PowerShell para encontrar una cadena en un archivo de texto.

Verificar si un Archivo Contiene una Cadena Específica Usando Select-String en PowerShell

Supongamos que tenemos un archivo Demo.txt en nuestra máquina y queremos encontrar la cadena Demostración en él.

Aquí está el script de PowerShell para hacerlo:

Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern 'Demonstration'

En este script, usamos Select-String con el parámetro -Path para especificar la ubicación del archivo y el parámetro -Pattern para especificar la cadena que estamos buscando.

Si nuestro archivo contiene el patrón especificado ('Demostración'), la consola mostrará el nombre del archivo, el número de línea y la línea que contiene la cadena.

Salida:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration

La salida anterior muestra el archivo Demo.txt con su ruta completa, la línea que contiene nuestra cadena (línea 1), y la línea que contiene la cadena en sí (Esto es puramente para demostración).

Pero, ¿qué pasa si solo necesitamos saber si el archivo contiene o no la cadena? En tal caso, podemos modificar el script de la siguiente manera:

$Knw = Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern "Demonstration"

if ($Knw -ne $null) {
    echo Contains String
}
else {
    echo Does not Contain String
}

En este script, hemos definido una variable llamada $Knw, que contiene el resultado de la cadena buscada "Demostración" en el archivo ubicado en la ruta especificada usando Select-String. Luego, comprobamos si la variable $Knw no es igual a $null, lo que significa que se encontró una coincidencia en el archivo.

Si se encuentra una coincidencia, imprime "Contiene Cadena.". Si no se encuentra ninguna coincidencia, imprime "No Contiene Cadena.".

Salida:

Contains String

Dado que nuestro archivo sí contiene el patrón "Demostración", la salida imprime Contiene Cadena.

Verificar si un Archivo Contiene una Cadena Específica Usando Get-Content en PowerShell

Get-Content es un cmdlet que recupera el contenido de una ruta específica a un archivo y lee el contenido del archivo para devolver un objeto de cadena. Para usar Get-Content en nuestro archivo Demo.txt, utilizaremos el script ilustrado a continuación:

Get-Content -Path C:\Users\pc\Demo\Demo.txt | Select-String -Pattern "Demonstration"

En este script, usamos Get-Content para leer el contenido de nuestro archivo Demo.txt especificado por el parámetro -Path y lo enviamos al comando Select-String, que utiliza el parámetro -Pattern para localizar la cadena Demostración.

Salida:

This purely for demonstration

Si solo queremos confirmar la presencia de la cadena, podemos usar el script que se muestra a continuación:

If (Get-Content C:\Users\pc\Demo\Demo.txt | % { $_ -match "Demonstration" }) {
    echo Contains String
}
else {
    echo Does not Contains String
}

En este script, usamos Get-Content para leer los datos del archivo ubicado en C:\Users\pc\Demo\Demo.txt y una tubería (|) para procesar cada línea del archivo una por una. Dentro del bloque %{} comprobamos si cada línea contiene la cadena "Demostración" utilizando el operador -match.

Si alguna línea en el archivo contiene "Demostración", imprime "Contiene Cadena". Si ninguna línea en el archivo contiene "Demostración", imprime "No Contiene Cadena".

Salida:

Contains String

Dado que nuestro archivo contiene la cadena especificada ("Demostración"), obtenemos Contiene Cadena como salida.

Verificar Múltiples Archivos que Contienen una Cadena Específica

¿Qué pasa si tienes más de cincuenta archivos de texto y deseas buscar una cadena en todos ellos? Discutiremos dos maneras de hacerlo.

Usando Get-ChildItem y Search-String en PowerShell

Podemos usar los cmdlets Get-ChildItem y Select-String. El cmdlet Get-ChildItem encontrará uno o más archivos basados en nuestros criterios de búsqueda.

Veamos un ejemplo. Suponiendo que nuestra carpeta Demo tiene más de cincuenta archivos de texto, podemos buscar la cadena Demostración en todos ellos usando este script:

Get-ChildItem -Path C:\Users\pc\Demo\ -Recurse | Select-String -Pattern 'Demonstration'

En este script, usamos Get-ChildItem para listar los archivos en el directorio especificado (-Path) y sus subdirectorios (-Recurse). El operador de tubería (|) pasa la lista de archivos al cmdlet Select-String.

Por último, usamos Select-String para buscar un patrón específico, 'Demostración' en cada archivo.

La consola mostrará los nombres de los archivos que contienen nuestra cadena, los números de línea y las líneas que contienen la cadena.

Salida:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem

Usando Select-String en PowerShell

También podemos usar Select-String solo para verificar la cadena específica en múltiples archivos.

Select-String -Path C:\Users\pc\Demo\*.txt -Pattern 'Demonstration'

En este script, usamos el comodín (*) en el parámetro -Path para buscar todos los archivos de texto en la carpeta Demo. El cmdlet Select-String buscará la cadena en todos los archivos que coincidan.

Salida:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem

Al igual que lo anterior, la consola mostrará los nombres de los archivos que contienen nuestra cadena, los números de línea y las líneas que contienen la cadena.

Conclusión

Windows PowerShell proporciona un conjunto de herramientas para buscar cadenas en archivos de texto de manera eficiente. Ya sea que prefieras usar Select-String, Get-Content, o una combinación de Get-ChildItem y Select-String, puedes localizar y manipular fácilmente datos dentro de tus archivos.

Con estos cmdlets, no tendrás problemas para encontrar la información que necesitas, haciendo que las búsquedas de archivos de texto en PowerShell sean sencillas.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

Artículo relacionado - PowerShell String