web-dev-qa-db-fra.com

grep sans afficher le chemin / fichier: ligne

Comment pouvez-vous grep et ne renvoyer que la ligne correspondante? c'est-à-dire que le chemin/nom du fichier est omis des résultats.

Dans ce cas, je souhaite rechercher dans tous les fichiers .bar du répertoire en cours, en recherchant le terme FOO.

find . -name '*.bar' -exec grep -Hn FOO {} \;
197
Allan Bendy

Pas besoin de find. Si vous recherchez simplement un modèle dans un répertoire spécifique, cela devrait suffire:

grep -hn FOO /your/path/*.bar

-h est le paramètre permettant de masquer le nom de fichier, à partir de man grep:

- h, --no-filename

Supprime le préfixe des noms de fichier en sortie. C'est la valeur par défaut lorsqu'il n'y a qu'un seul fichier (ou qu'une seule entrée standard) à rechercher.

Notez que vous utilisiez

- H, --with-filename

Imprimez le nom du fichier pour chaque correspondance. C'est la valeur par défaut lorsqu'il y a plus d'un fichier à rechercher.

317
fedorqui

Il suffit de remplacer -H par -h. Vérifiez man grep pour plus de détails sur les options

find . -name '*.bar' -exec grep -hn FOO {} \;
7
jkshah

De la page de manuel:

-h, --no-filename
    Suppress the prefixing of file names on output. This is the default when there
    is only one file (or only standard input) to search.
1
TC1