TUTOS.EU

Faire une recherche d'un mot dans des fichiers Windows avec l'équivalent de grep

Rechercher un mot dans le contenu de fichiers avec l'équivalent de la commande grep en Powershell


Au préalable vous pouvez désactiver l'arrêt du script si il rencontre une erreur, cad ici si il n'arrive pas à accéder à un répertoire

$ErrorActionPreference = "silentlycontinue" #En cas d'erreur, on ne dit rien et on continu
Lien vers le fichier : cliquez ici

Recherche basique où l'on cherche motarechercher dans tous les fichiers qui sont dans c:\
Affichage du résultat sur l'écran

Clear-Host
Select-String -Path C:\*.* -Pattern "motarechercher"
Lien vers le fichier : cliquez ici

La même chose, mais on cherche dans les sous-répertoires et on ne traite que les fichiers en .txt

Get-ChildItem -Path "C:\" -Recurse -File -include "*.txt" | %{Select-String -Path $_.FullName -Pattern "motarechercher"}
Lien vers le fichier : cliquez ici

Recherche de unmotachercher dans des fichiers en .log situés dans C:\
Quand un résultat est trouvé, on prend en plus par résultat les 5 lignes précédentes et les 5 lignes suivantes
Le résultat est stocké dans un fichier d:\Resultat_recherche.txt

Clear-Host
Select-String -Path C:\nomfichier*.log -Pattern "unmotachercher" -Context 5,5 | out-file d:\Resultat_recherche.txt
Lien vers le fichier : cliquez ici

Le script ci-dessous ouvre un fichier et analyse toutes ses lignes.
Pour chaque ligne un teste if est fait pour voir si la ligne est retenue.
Si c'est le cas elle est recopier dans un fichier de réponse.

Le script demande le nom d'un fichier .txt à filtrer.
A défaut c'est le premier fichier .txt trouvé dans le répertoire du script qui est traité.
Il faut modifier la fin du script pour adapter le filtre qui va être appliqué.
Le résultat est directement affiché à l'écran ainsi que dans un fichier texte suffixé _Resultat.txt.

Clear-Host
$varCheminRepertoireScript = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition) #On récupère le chemin du répertoire contenant ce script
$currentScriptName = $MyInvocation.MyCommand.Name #Récupération du nom du script en cours
$currentScriptName = $currentScriptName.substring(0,$($currentScriptName.lastindexofany(".")))

$ValeurParDefaut = "FichierAFiltrer.txt" #Nom du fichier par defaut dans lequel on va faire la recherche
$MonFolder = Get-ChildItem -Path $varCheminRepertoireScript -File  | Where-Object {$_.Name -match '.txt$'} #On récupère la liste des fichiers en .txt de ce répertoire
foreach ($MyFile in $MonFolder)
{
	$ValeurParDefaut = $MyFile.name #Le premier fichier .txt trouvé servira de valeur par défaut
	break
}
$ReponseUtilisateur = read-host "Entrez le nom du fichier à filtrer (réponse par défaut si vide : $($MyFile.name)"
if ($ReponseUtilisateur.Length -eq 0) {$ReponseUtilisateur = $ValeurParDefaut} #Si l'utilisateur n'a pas répondu, on met une valeur par défaut 

#Création du fichier contenant le résultat
$EmplacementFichierAvecLeResultat = "$varCheminRepertoireScript\$($currentScriptName)_Resultat.txt"
$MonFichierAvecLeResultat = New-Item -type file $EmplacementFichierAvecLeResultat -Force

#Ouverture du fichier à analyser
$NomFichieraLire = $ReponseUtilisateur
$EmplacementFichier = [string]
$EmplacementFichier = "$varCheminRepertoireScript\$NomFichieraLire"
$MonFichier = get-content $EmplacementFichier

$NumeroDeLine = 0
foreach ($UneLigne in $MonFichier){
	$NumeroDeLine++
	if ($UneLigne -match 'studio' -eq $true) { #Lignes qui contiennent le mot studio
	#if ($UneLigne -match '^footer_' -eq $true) { #Lignes qui commencent par footer__
	#if ($UneLigne -match 'jpg$' -eq $true) { #Lignes qui se terminent par .jpg
	#if (($UneLigne -match '^210') -and ($UneLigne -match 'jpg$') -eq $true) { #Lignes qui commencent par 210 et qui se terminent par .jpg
	#Where {$_.name -notlike "*014*"}
		$MyLine = "Ligne $($NumeroDeLine) : $($UneLigne)"
		Write-host $MyLine
		add-content $MonFichierAvecLeResultat $MyLine
	}
}
Lien vers le fichier : cliquez ici

Pages Web

Site WebDescription
Thomasmaurer.chPowershell: search for string or grep for powershell