1 votes

Ne renvoyer qu'une seule ligne par fichier avec grep dans le terminal

Différents messages dans d'autres forums ont suggéré que la meilleure façon d'utiliser le grep pour renvoyer une seule ligne par fichier est d'utiliser -m 1 qui est le --max-count option. Cependant, lorsque j'écris la ligne suivante, j'obtiens seulement un fichier, et non une ligne par fichier :

grep -m 1 "library" ./ -R

Renvoie un seul fichier sur une seule ligne :

.//results/fig/fig_functions.R:# library(plyr)

Considérant que

grep "library" ./ -R

Renvoie plusieurs fichiers, chacun avec plusieurs lignes :

.//results/fig/fig_functions.R:# library(plyr)
.//results/fig/fig_functions.R:# library(grid)
.//src/rmd/genevese_params.html:library(sf) 
.//src/rmd/genevese_params.html:library(raster)
[many more lines and files...]

Je voudrais que la commande renvoie tous contenant le texte, mais ne renvoie qu'une ligne par fichier. Est-ce que j'utilise grep incorrecte ou existe-t-il une autre façon de procéder ?

2voto

Tom Harrington Points 2112

Cela ne fonctionne pas comme prévu parce que les Macs utilisent une version BSD de grep alors que les réponses que vous voyez sont pour GNU grep tel qu'on le trouve sous Linux. Ils sont très similaires, mais pas identiques, et ils gèrent les éléments suivants -m différemment. BSD grep friandises -m comme couvrant la totalité de la sortie, alors que la version de GNU est par fichier.

Une façon d'obtenir le résultat que vous décrivez est la suivante :

find . -type f -exec grep -H -m1 library '{}' \;

Il s'agit d'utiliser find pour obtenir le chemin d'accès à chaque fichier dans . (de manière récursive, afin de récupérer tous les sous-répertoires), puis exécute la commande grep -m1 sur chacun d'entre eux. Les -type f raconte find pour n'obtenir que les fichiers ordinaires, et non les répertoires et autres éléments. Les -H raconte grep pour imprimer les noms des fichiers correspondants, et pas seulement le texte correspondant.

Une autre solution consisterait à installer GNU grep , en utilisant Homebrew .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X