Comment trouver du texte dans des fichiers et ne conserver que les lignes correspondantes en utilisant le terminal sous OS X?

3

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 findou est-ce que grep a sa propre fonctionnalité pour ça? Quelque chose comme:

find ./* -exec do grep stuff here
Alex
la source
Les lignes 1 à 4 sont dans votre fichier ou est-ce votre simulation?
jeudi
1
grep a une option récursive-R
BroSlow

Réponses:

3

grepne trouverait que des lignes correspondant à un motif dans un fichier, cela ne changerait pas le fichier. Vous pouvez utiliser sedpour trouver le motif et apporter des modifications au fichier:

sed '/\B\/foobar\b/!d' filename

afficherait les lignes correspondantes /foobardans le fichier. Pour enregistrer les modifications apportées au fichier sur place, utilisez l' -ioption.

sed -i '/\B\/foobar\b/!d' filename

Vous pouvez aussi l'utiliser avec find:

find . -type f -exec sed -i'' '/\B\/foobar\b/!d' {} \;
devnull
la source
find . -type f -exec find ./* -exec sed -i '/\B\/foobar\b/!d' {} \;erreurs:find: -exec: no terminating ";" or "+"
Alex
find ./* -exec sed -i '/\B\/foobar\b/!d' {} \;erreurssed: 1: "./myfile": invalid command code .
Alex
utilisez encore assez souvent d'ailleurs, si puissant et rapide. merci encore
Alex