2009-02-20 6 views
5

Bonjour J'utilise cette commande pour rechercher du texte dans des fichiers sous LinuxComment imprimer la ligne correspondant à mon texte en utilisant find dans linux?

find ./ -type f -exec grep -l "Text To Find" {} \; 

La commande fonctionne très bien, mais je voudrais d'imprimer automatiquement la ligne qui contient le texte ou s'il est possible que les sapins deux lignes ci-dessus le texte et les deux lignes derrière le texte.

aussi une autre suggestions pour trouver du texte et d'imprimer les lignes au lieu d'utiliser trouver sont les bienvenus,

Merci beaucoup à l'avance.

Répondre

14
find ./ -type f -exec grep -Hn "Text To Find" {} \; 

Utilisez -A et -b pour imprimer des lignes avant et après le match:

find ./ -type f -exec grep -Hn -A1 -B1 "Text To Find" {} \; 

vous pouvez aussi utiliser grep:

grep -R -Hn -A1 -B1 "Text To Find" * 
2

Pourquoi ne pas simplement grep?

grep -r -C2 "Text To Find" * 
+0

Parce que l'option '-r' n'est pas portable (en fait, elle n'est pas non plus" -C "mais bon, il l'a demandé.)) – vladr

+0

L'affiche a dit "Aussi d'autres suggestions pour trouver le texte et imprimer les lignes au lieu d'utiliser trouver sont les bienvenus" et étiqueté la question "Linux", GNU Grep est probablement très bien. –

1

Pour imprimer les lignes (avec le fichier qui le contient):

find . -type f -exec grep "text" {} /dev/null \;

Pour voir 2 lignes suivant la ligne correspondant à ajouter -A2 après "grep" dans le au-dessus de la ligne, -B2 pour les deux lignes avant, et -C2 pour les deux.

1
find ./ -type f -exec egrep -H -B 2 -A 2 "Text" '{}' ';' 
3

Vous pouvez utiliser le suppléant suivant find construction pour une recherche plus rapide:

find . -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find" 

Au lieu d'invoquer grep pour chaque fichier (qui est ce que -exec ... {} fait), il appellera grep pour bouquets des fichiers.

Notez que les -print0, -0 et -C2 options ne sont pas portables (fonctionne très bien avec les variantes GNU des programmes find, xargs et grep Linux, dire que la plupart des installations BSD etc., ainsi que Cygwin et MinGW, mais ne le font pas attendez-leur à travailler avec des installations Solaris, HPUX etc. "plus anciennes".)

+0

Et assurez-vous d'utiliser "-print0" pour trouver et "-0" sur xargs. Cela aidera avec les fichiers qui ont des espaces dans leurs noms en utilisant NULL comme un délimiteur plutôt que des espaces. – Andy

Questions connexes