Je suis assez nouveau sur le terminal et les lignes de commande. D'après ce que j'ai découvert, grep semble être l'outil idéal pour les fichiers de recherche de chaînes de texte spécifiques.
J'ai un dossier avec beaucoup de fichiers texte énormes et je voudrais ne garder que les lignes de chaque fichier qui contient une certaine chaîne (par exemple "/ foobar"., Par exemple:
file1 (no file ending)
1. lorem ipsum
2. trololo /foobar abc
3. dolor sit
4. foobar def
sera ensuite:
1. trololo /foobar abc
2. foobar def
Je suppose que la commande ressemble à quelque chose comme ça
grep -wE "(/foobar)"
mais je ne sais pas comment dire à la commande de ne conserver que ces lignes et de le faire pour chaque fichier que vous trouvez dans le dossier actuel.
Feriez-vous cela avec find
ou est-ce que grep a sa propre fonctionnalité pour ça? Quelque chose comme:
find ./* -exec do grep stuff here
-R
Réponses:
grep
ne trouverait que des lignes correspondant à un motif dans un fichier, cela ne changerait pas le fichier. Vous pouvez utilisersed
pour trouver le motif et apporter des modifications au fichier:afficherait les lignes correspondantes
/foobar
dans le fichier. Pour enregistrer les modifications apportées au fichier sur place, utilisez l'-i
option.Vous pouvez aussi l'utiliser avec
find
:la source
find . -type f -exec find ./* -exec sed -i '/\B\/foobar\b/!d' {} \;
erreurs:find: -exec: no terminating ";" or "+"
find ./* -exec sed -i '/\B\/foobar\b/!d' {} \;
erreurssed: 1: "./myfile": invalid command code .