IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Quentin Apruzzese

[Linux] Exemples d'utilisation de grep, find, awk et sed

Noter ce billet
par , 09/03/2016 à 10h48 (1979 Affichages)
Chercher une chaine "225978" dans tous les fichiers d'un répertoire récursivement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
grep -r '/path/to/somewhere/' -e "pattern"
-r : permet de rechercher dans les sous dossiers
-e : utilise le pattern indiqué. ceci permet de protéger les motifs commençant par -.
Remarque : Il n'est pas nécessaire d'utiliser les '' ou "" dans la commande si il n'y a pas d'espace.

Récupérer le nom de tous les fichiers contenant "225978" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
grep -wr 225978 .|awk -F ':' '{print $1}'|sort -u
-w: ne rechercher que le mot entier: 225978 doit être un mot entier
-r: recherche récursive
-F: indique à awk que le séparateur entre les fields est ":"
Print $1:awk n'affiche que le premier field (donc précédant ":")

Astuce : mettre les listes de noms de fichiers dans une variable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
LIST=$(grep -wr 225978 .|awk -F ':' '{print $1}'|sort -u)
Chercher une chaine dans cette liste :
Supprimer de git les fichiers modifiés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
git checkout -- $(gt status|grep modified.*java$|awk '{print $2}'
Chercher toutes les occurrences d'un mot dans un fichier + les 4 lignes qui suivent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
grep -A4 -P '<configuration />' MODEL.xml
Faire en sorte que les réponses renvoyées soient uniques (pas de duplicate):
Remplacer une occurrence par une autre dans un groupe de fichiers:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
find . -name "*" -exec sed -i "s/oldWord/newWord/g" '{}' \;
[JAVA]Récupérer tous les setters de toutes les classes d'un package:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
grep -roh "void set\w*" . | sed 's/void //'
Trouver un fichier non vide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
find path -type f ! -size 0
Lister les fichiers contenants les patterns "CCH" ET "setEnabled"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
grep -l "setEnabled" $(find . -name "*.java" -exec grep -l "CCH" {} \;)
Supprimer les toutes les occurences d'un pattern dans un fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
sed -i 's/\.\.\.//' file.txt
Remplacer un pattern dans tous les fichiers récursivement
Dans notre exemple, les fichiers commencent par file.txt, et l'on veut remplacer localhost par distanthost.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
find . -name "file.txt*" -exec sed -i "s/localhost/distanthost/g" {} \;
Supprimer tous les fichiers d'un répertoire, sauf un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
rm $(ls * | grep -v not_this_file)
Afficher une chaîne comprise entre deux chaînes avec grep
Pour un parcours sur un ensemble récursif de fichiers contenant potentiellement "associateIdWithButton("index", lItem);" et duquel l'on voudrait extraire les mots compris entre associateIdWithButton\( " et ":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
grep -Phor 'associateIdWithButton\("\K.*?(?=")' .
-o: afficher que la chaîne matchée
-r: parcours dans tous les sous dossiers
-h: masquer le titre des fichiers de façon à ne faire ressortir que les noms voulus
-P: considérer la chaîne à matcher comme une expression régulière PERL
-( étant un caractère spécial, il s'écrit \(
-l: n'affiche que le chemin du fichier (sans la ligne contenant le pattern)

Extraire toutes les lignes d'un fichier contenant '=', mais dont le = n'est jamais précédé par un espace
Code : Sélectionner tout - Visualiser dans une fenêtre à part
awk '!/ =/ && /=/' rcms.lang
!/ =/ indique que l'on ne match pas la regex entre //, donc pas d'espace suivi de =
&& permet d'ajouter une deuxième regex obligatoire pour matcher la ligne
/=/ indique que l'on retourne que les lignes ayant au moins un =

N'afficher que les lignes contenant plusieurs "."
Code : Sélectionner tout - Visualiser dans une fenêtre à part
awk -F '.' 'NF>2 {print $0}'
NF>2 indique que l'on veut plus de deux fields, sachant que le séparateur est "." (3 fields = 2 points)
Print $0 = afficher toute la ligne

Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog Viadeo Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog Twitter Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog Google Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog Facebook Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog Digg Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog Delicious Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog MySpace Envoyer le billet « [Linux] Exemples d'utilisation de grep, find, awk et sed » dans le blog Yahoo

Mis à jour 17/12/2020 à 12h30 par Heavy Metal Hero

Catégories
Sans catégorie

Commentaires