Action disabled: register

Trouver et remplacer des informations

Avec grep

Chercher une info dans un tas de log dans un dossier et sortir les résultats dans un fichier à part :

grep -i -e "Recherche" log_NAME*.txt > nomfichier.txt

Mais pour du récursif j'ai pas encore trouvé bien probant. Celle-ci marche mais va chercher dans tous les types de fichiers.

grep -nri "Recherche" > nomfichier.txt

Si les dossiers sont de même profondeur (cas des logs), ceci peut marcher :

grep -nri "Recherche" log/2020/*/*.log

Autres options sympas de grep :

  • –color : met en couleur ce qui est recherché (permet de voir plus vite si c'est bien le bon truc).
  • -C N (N est un nombre) : affiche les lignes avant et après, afin d'avoir le contexte. Chaque bloc est séparé par des doubles tirets.
    • -A N : idem mais uniquement les lignes après l’occurrence (“after”).
    • -B N : idem mais uniquement les lignes avant l’occurrence (“before”).

Pour afficher seulement les fichiers où apparait ce qu'on cherche, c'est -l. Et donc, de façon récursive, sans tenir compte de la case, pour n'afficher que le nom des fichiers :

grep -lri "truc" dossier/*

Avec find

Pour chercher une chaîne de caractères uniquement dans les fichiers d'une certaine extension (pour l'exemple les fichiers .txt) :

find . -type f -iname '*.txt' -exec grep -i "recherche" {} \;

Pour remplacer une chaîne de caractère dans des tas de fichier (ORIGINE) par une autre chaîne de caractère (REMPLACANT) et de façon récursive. Caractère d'échappement \ parfois nécessaire, entre autre devant [ :

find . -type f -exec sed -i 's#ORIGINE#REMPLACANT#g' {} \;

Pour transformer les majuscules en minuscules (grâce à tr) dans les noms de dossier (à faire plusieurs fois pour le récursif ? :

find . -type d|while read d; do mv $d `echo $d |tr '[:upper:]' '[:lower:]'`; done

Puis dans les noms de fichiers :

find . -type f|while read f; do mv $f `echo $f |tr '[:upper:]' '[:lower:]'`; done

Fichiers trop longs

Dans le cas des fichiers de log trop longs, que grep et les éditeurs de texte n'arrivent plus à lire (erreurs variées), on découpe le fichier en plusieurs morceaux.

On créé un dossier où mettre les morceaux, puis on coupe toutes les 1000 lignes :

mkdir canal.log.d 
split -l 10000 \#canal.log canal.log.d/part.
CC Attribution-Noncommercial-Share Alike 4.0 International Driven by DokuWiki
pratique/informatique/recherche.txt · Dernière modification : 11/08/2023 08:53 de Zatalyz