CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Bash] Chercher mot dans fichier

]trichelieu[
]trichelieu[
Niveau 10
26 mars 2013 à 00:38:33

Salut :p)

Je suis relativement TRES débutant en bash, et grosso modo je dois chercher un mot dans un fichier c (je ne sais pas quel fichier précisément).

Pour le moment, j'ai ça :

  1. !/bin/bash

find / -name *'.c' | grep "$1" /

Mais... ça ne marche pas du tout. Et je sais pas vraiment pourquoi, file est censé parcourir tout mes dossiers de manière récursive et chaque réponse est envoyé à grep qui va alors chercher si le mot est présent dans le fichier, mais ça marche vraiment pas...
Je vous demande pas de me donner la solution, même si ça doit vous sembler simple, ça fait partie d'un exercice noter (c'est un bout de l'exo, il y a du regex et autre à côté), mais si vous pouviez juste me donner un coup de pouce s'il vous plaît, parce que mes cours, google et man ne m'aident pas vraiment là :(

godrik
godrik
Niveau 30
26 mars 2013 à 02:42:44

$ find -name '*.c' . -exec grep "$1" {} \;

godrik
godrik
Niveau 30
26 mars 2013 à 02:43:13

sinon tu peux regarder du cote de "xargs" (check the man)

]trichelieu[
]trichelieu[
Niveau 10
26 mars 2013 à 02:52:16

Que fait le . ? Je connais le > et le |, le . déclanche une commande pour chaque résultat ?

godrik
godrik
Niveau 30
26 mars 2013 à 03:01:01

nan, . est l'adresse du repertoire courant :)

]trichelieu[
]trichelieu[
Niveau 10
26 mars 2013 à 04:25:58

:facepalm: Tellement l'habitude d'écrire ./ :p)

Du coup c'est le -exec qui déclenche le grep pour les résultats, compris merci :p)

godrik
godrik
Niveau 30
26 mars 2013 à 04:35:45

yep. regardes les details dans le man de find. ca a une syntaxe un peu abscons.

]trichelieu[
]trichelieu[
Niveau 10
26 mars 2013 à 06:15:37

Avec la commande find $ find -name '*.c' . -exec grep "$1" {} \; , je trouve aussi les .sh et autres fichiers contenant print, je pense pas que ce soit normal :o))

]trichelieu[
]trichelieu[
Niveau 10
26 mars 2013 à 06:19:17

Je crois que je viens de comprendre, find prend autant d'argument qu'il veut, donc là il cherche $1 dans tout *.c et dans tout . :p)

Je crois... Je suis en train de lire le man :p)

yoshi_95
yoshi_95
Niveau 10
26 mars 2013 à 10:46:11

grep recherche déjà récursivement
`grep -r $1 .`

Pourquoi utiliser find?

godrik
godrik
Niveau 30
26 mars 2013 à 14:23:21

yoshi pour n'extraire que les codes C (identifies par le nom de fichier finissant en .c)

DN4
DN4
Niveau 7
27 mars 2013 à 04:07:27

:d) find -type f -name '*.c' -exec grep -l "$1" {} +

1) Le répertoire par défaut est le courant, inutile de le préciser avec "." :) ;

2) En précisant le type des fichiers que tu recherches, tu évites à find(1) de faire ce que tu lui demandes sur ceux qui ne sont pas dudit type, et donc gagnes en perfs :fete: ;

3) Tu peux utiliser ici la syntaxe {} + de l'option -exec car grep(1) accepte plusieurs noms de fichiers en tant qu'arguments. Ceci a pour conséquence d'exécuter qu'une et une seule fois grep(1), i.e., "grep foo1 foo2 ... fooN" à l'opposé de "grep foo1; grep foo2; grep ...; grep fooN". :-)

NB1 : la syntaxe {} + n'existe que dans la version GNU et BSD de find(1), cependant elle est bien définie par POSIX mais n'est pas acceptée, donc n'est pas portable. :sarcastic:

NB2 : {} est substitué par chaque nom de fichier (chaque chemin absolu), donc le nombre d'arguments maximum défini par ARG_MAX (getconf ARG_MAX pour connaître sa valeur) rentre en compte. À toi de voir si tu peux l'utiliser ou non, mais en règle générale, tu ne risques pas de dépasser ladite limite. :-)))

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment