Liste des noms de fichiers basés sur un modèle de fichier et le contenu du fichier – GREP?

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'