Comprobar si un archivo contiene una cadena específica mediante PowerShell

John Wachira 20 junio 2023
  1. Comprobar si un archivo contiene una cadena específica usando Select-String en PowerShell
  2. Comprobar si un archivo contiene una cadena específica usando Get-Content en PowerShell
  3. Comprobar si un archivo contiene una cadena específica usando Get-ChildItem y Search-String en PowerShell
Comprobar si un archivo contiene una cadena específica mediante PowerShell

Este artículo analiza los diversos métodos que podemos emplear para encontrar una cadena en un archivo de texto con Windows PowerShell.

Podemos usar grep en entornos Unix y Linux para lograr esto. El equivalente a esto en PowerShell es un cmdlet llamado Select-String, que usa expresiones regulares para ubicar cadenas en archivos.

Comprobar si un archivo contiene una cadena específica usando Select-String en PowerShell

Digamos que tenemos un archivo Demo.txt en nuestra máquina. ¿Cómo encontraríamos la cadena Demostración en el archivo usando PowerShell?

Aquí está el script de PowerShell que puede usar:

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

En el script de shell ilustrado arriba, Select-String emplea el patrón Demonstration para buscar la cadena en nuestro archivo Demo.txt. Tenga en cuenta que hemos especificado la ruta completa a nuestro archivo en el parámetro Ruta.

Si nuestro archivo contiene el patrón especificado, la consola generará el nombre del archivo, el número de línea y la línea que contiene la cadena. Aquí está la salida:

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

Del resultado anterior, tenemos el archivo Demo.txt con su ruta completa, la línea que contiene nuestra cadena, la línea 1, y la línea que contiene la cadena, es decir, Esto es puramente para demostración.

¿Qué pasa si solo necesitamos saber si el archivo contiene o no la cadena?

En tal caso, puede utilizar un script como el que se muestra a continuación:

$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 el script de shell anterior, hemos definido una cadena llamada $Knw y verificado si no es igual a $null. Esto es cierto ya que nuestro archivo contiene el patrón Demostración.

Deberíamos obtener la cadena Contiene como salida.

Comprobar si un archivo contiene una cadena específica usando Get-Content en PowerShell

Get-Content es un cmdlet que obtiene 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, usaremos el script que se ilustra a continuación:

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

En el script de PowerShell anterior, Get-Content obtiene y lee el contenido de nuestro archivo Demo.txt especificado por el parámetro Path. Luego reenvía el contenido del archivo al comando Select-String que emplea el parámetro Pattern para ubicar nuestra cadena Demonstration.

Esto generará la línea que contiene nuestra cadena.

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
}

Dado que nuestro archivo contiene la cadena especificada, deberíamos obtener “Contiene cadena” como salida.

Comprobar si un archivo contiene una cadena específica usando Get-ChildItem y Search-String en PowerShell

En un escenario en el que tenemos un grupo de más de cincuenta archivos de texto y nos gustaría buscar una cadena en todos los archivos, ¿cómo lo haríamos?

En tal escenario, emplearemos el cmdlet Get-ChildItem y Search-String. El cmdlet Get-ChildItem encontrará uno o más archivos según nuestros criterios de búsqueda.

Veamos un ejemplo.

Suponiendo que nuestra carpeta Demostración tiene más de cincuenta archivos de texto, ¿cómo buscamos la cadena Demostración en estos archivos?

Este es el script que usaremos:

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

El script anterior buscará la cadena Demostración recursivamente en el parámetro Ruta especificado. La consola generará los nombres de archivo que contienen nuestra cadena, los números de línea y las líneas que contienen la cadena.

Aquí está nuestra 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

Ahí tienes.

En pocas palabras, los comandos Get-ChildItem, Get-Content y Search-String son útiles cuando queremos encontrar una cadena de archivo específica usando Windows PowerShell. Select-String es el equivalente de grep en Unix y findstr en Windows.

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