Comment puis-je utiliser la commande Grep pour rechercher file name
basé sur un caractère "LMN2011*"
répertoriant tous les fichiers avec ceci comme début?
Je veux append une autre vérification sur le contenu de ces fichiers.
Si file content
a quelque chose comme
LMN20113456
Puis-je utiliser GREP
pour cela?
Grep -ls "LMN2011*" "LMN20113456"
Quelle est la bonne façon de rechercher les noms de fichiers et leur contenu à l’aide des commandes shell?
Grep n’utilise PAS de “jokers” pour la recherche, c’est-à-dire que le shell est globalisé, comme * .jpg. Grep utilise des “expressions régulières” pour la correspondance de modèle. Alors que dans le shell ‘*’ signifie “n’importe quoi”, dans grep, cela signifie “correspond à l’élément précédent zéro ou plusieurs fois”.
Plus d’informations et d’exemples ici: http://www.regular-expressions.info/reference.html
Pour répondre à votre question, vous pouvez trouver des fichiers correspondant à un motif avec grep:
find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011
Ensuite, vous pouvez rechercher leur contenu (insensible à la casse):
find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'
Si les chemins peuvent contenir des espaces, vous devez utiliser la fonctionnalité “fin zéro”:
find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'
Cela peut être fait sans find
aussi en utilisant l’option "--include"
de grep.
La page de manuel de grep dit:
--include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
Donc, pour faire une recherche récursive d’une chaîne dans un fichier correspondant à un modèle spécifique, cela ressemblera à ceci:
grep -r --include=
Par exemple, pour rechercher de manière récursive la chaîne “mytarget” dans tous les Makefiles:
grep -r --include="Makefile" "mytarget" ./
Ou pour rechercher dans tous les fichiers commençant par “Make” dans le nom de fichier:
grep -r --include="Make*" "mytarget" ./
grep LMN20113456 LMN2011*
ou si vous souhaitez effectuer une recherche récursive dans les sous-répertoires:
find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;
find / folder -type f -mtime -90 | grep -E “(.txt | .php | .inc | .root | .gif)” | xargs ls -l> WWWlastActivity.log
Supposons LMN2011*
fichiers LMN2011*
trouvent dans /home/me
mais que rien ne soit omis dans /home/me/temp
ou ci-dessous:
find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'