Aide sur script de lecture dans fichiers e nregex [Résolu]

Signaler
-
Messages postés
29911
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 juin 2021
-
Bonjour tout le monde,

J'aimerai recenser tous les fichiers dans lesquels on fait de la manipulation d'IP ou encore ou il y a des références de répertoires windows.

je penses qu'il me faut donc passer par du grep via du regex avec comme recherche le regex
IP : ={0-9}+.{0-9}+.{0-9}+.{0-9}+
répertoires windows : C:\{w\W\}*

Je vous avoue galérer un peut moi qui si débutant en regex et même en script shell de manière général.

J'ai pu travailler sur la récursivité dans mes répertoires cibles. Il ne me manque plus que la partie regex et également la partie sauvegarde uniquement des fichiers dans un fichier de log par exemple.

Si vous pouviez m'aider ce serait super cool!

merci à vous

2 réponses

Messages postés
29911
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 juin 2021
7 129
Bonjour,

Pour chercher les fichiers qui contiennent une chaînes conforme à une expression rationnelle, l'idéal est d'utiliser
grep
ou egrep, en particulier les options
-n
et
-r
. Je te recommande vivement d'utiliser
egrep
, qui supporte plus d'opérateurs que
grep
et dont la syntaxe est plus pratique.

La commande type est :
grep -nr regexp dossier
.

Ensuite il faut écrire la bonne expression rationnelle. Ici tu as mal compris la signification de l'opérateur
{}
(ce serait plutôt
[]
) dans ton cas. La syntaxe est rappelée dans
man egrep
.

De plus les deux expressions rationnelles que tu proposes ont quelques limites :
  • IP : tu as défini une expression rationnelle qui détecte les adresses IPv4 mais pas les adresses IPv6. Cette expression rationnelle (une fois la syntaxe corrigée) rattrapera potentiellement des chaînes qui ne sont pas des IPv4 (e.g.
    1111.2222.3333.4444
    )
  • Chemin windows : ici tu forces la recherche de chemin absolu impliquant le lecteur C: (or, un chemin windows peut impliquer un autre lecteur). De plus, le caractère
    \
    doit être échappé (soit en le remplaçant par
    \\
    , soit par
    [\]
    ).


Voici comment récupérer parmi tous les fichiers dans
/etc
et ses sous dossiers toutes les lignes associés à des adresses IPv4 :

egrep -nr '(((25[0-5]|(2[0-4]|[0-1]{0,1}[0-9]){0,1}[0-9])[.]){3}(25[0-5]|(2[0-4]|[0-1]{0,1}[0-9]){0,1}[0-9]))' /etc 2>/dev/null


Deux remarques sur cette commande :
  • l'expression rationnelle détecte exactement les adresses IPv4
  • j'ai ajouté en fin de ligne de
    2>/dev/null
    pour filtrer les messages d'erreurs éventuels (e.g. permissions non accordées).


Pour extraire les noms de fichiers concernés, on peut la compléter comme suit :

egrep -lr '(((25[0-5]|(2[0-4]|[0-1]{0,1}[0-9]){0,1}[0-9])[.]){3}(25[0-5]|(2[0-4]|[0-1]{0,1}[0-9]){0,1}[0-9]))' /etc 2>/dev/null | sort | uniq


Deux remarques sur cette commande :
  • on utilise l'option
    -l
    au lieu de
    -n
    ;
  • l'ajout de
    | sort | uniq
    permet de trier les résultats dans l'ordre lexicographique et de filtrer les doublons.


On peut partant de là exécuter cette commande avec une autre expression rationnelle :
  • IPv6 : tu peux utiliser cette expression rationnelle, pas tout à fait précise (elle peut par exemple rattraper des dates au format hh:mm:ss), mais elle a le mérite d'être simple :


egrep --color -rn '\b(([a-fA-F0-9]{0,4})?(:[a-fA-F0-9]{0,4})+:[a-fA-F0-9]{0,4})\b' /etc 2>/dev/null
  • Chemin windows : tu peux par exemple utiliser :


egrep --color -rn '\b[a-zA-Z]:([\]\w*)+\b' /etc 2>/dev/null



Bonne chance
Je te remercie pour ta réponse super complète!!!!!

Dans mon cas ce qui m'arrange c'est que ce ne sont que des IP de type ipv4 qui sont manipulés.
Sinon oui effectivement j'avais pris en compte que les lecteurs windows pouvaient être de n'importe quel caractère.
Je viens de finir mes scripts d'extraction et j'ai pu grâce à ta réponse gagner du temps!!
Merci pour ton aide.
Messages postés
29911
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 juin 2021
7 129
Super :-) Toutes mes félicitations et bonne continuation, je bascule ton sujet en résolu.