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

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

Clear-Host
$ErrorActionPreference = "silentlycontinue" #En cas d'erreur, on ne dit rien et on continu
Select-String -Path C:\*.* -Pattern "motarechercher"
Lien vers le fichier : cliquez ici Copier le code

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

Clear-Host
$ErrorActionPreference = "silentlycontinue" #En cas d'erreur, on ne dit rien et on continu
Get-ChildItem -Path "C:\" -Recurse -File -include "*.txt" | %{Select-String -Path $_.FullName -Pattern "motarechercher"}
Lien vers le fichier : cliquez ici Copier le code

L'option Pattern prend du regex en entrée, donc vous pourriez rechercher dans un fichier toutes les lignes qui commencent par 12 et qui contiennent le mot chocolat.

Exemple

Select-String -Path "D:\monfichier.txt" -Pattern "^12.*chocolat"
Lien vers le fichier : cliquez ici Copier le code

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 Copier le code

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 Copier le code

Pages Web

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

2