9
votes

Écrivez la sortie de Grep dans un fichier sur Linux?

find . -name "*.php" | xargs grep -i -n "searchstring" >output.txt
Here I am trying to write data into a file which is not happening...

4 commentaires

Quelle est l'erreur que vous obtenez? Pourriez-vous que vous n'ayez pas la permission de créer une sortie.txt?


Que se passe-t-il lorsque vous exécutez la commande sans le "> de la sortie.txt"?


@Shawn, ce n'est pas vrai: la redirection> est destinée à Xargs, et non à chaque grep qui fonctionne, tous les greps écrivent dans le même fichier de sortie.


@Lars true. Que pensais-je ... supprimera le commentaire précédent afin qu'il ne provoque aucune confusion.


8 Réponses :


0
votes

a l'air bien pour moi. Que se passe-t-il si vous supprimez > sortie.txt ?


0 commentaires

10
votes

Que diriez-vous d'ajouter des résultats en utilisant >> code>? XXX PRE>

Je n'ai pas de boîte Linux avec moi maintenant, alors je vais essayer d'improviser. p>

Le xargs grep -i -n "searchstring" code> me dérange un peu. p>

Peut-être que vous vouliez dire xargs -i {} grep -i "Searchstring" {} code> ou juste xargs grep -i "searchstring" code>? p>

depuis -n code> comme l'argument de grep vous donnera Seules les lignes de numéro, je doute que c'est ce dont vous aviez besoin. p>

De cette façon, votre code final serait P>

find . -name "*.php" | xargs grep -i "searchstring" >> output.txt


2 commentaires

@Rajesh: alors votre première partie semble problématique. Vous devriez écrire votre code itérativement, afin que vous puissiez voir ce qui se passe vraiment. Dans ce cas, vous devriez avoir essayé trouver. -Name "* .php" Pour voir si vous obtenez des résultats. Que se passe-t-il si vous essayez trouver. -Name "* php" -type f ?


Vous pouvez utiliser grep -include = *. PHP ... Pour filtrer par extension afin d'éviter le Rechercher | Xargs La laideur



2
votes
find . -name "*.php" -exec grep -i -Hn "function" {} \;  >output.txt

1 commentaires

Grep: {}: Aucun fichier ou répertoire de ce type GREP :;: Aucun fichier ou répertoire de ce type



1
votes

Je suppose que vous avez des espaces dans les noms de fichiers PHP. Si vous les remettez à grep via xargs de la manière que vous faites, les noms sont divisés en pièces et grep interprète ces pièces comme noms de fichiers qui Il ne peut alors pas trouver.

Il y a une solution pour cela. trouver a une option -print0 qui indique pour séparer les résultats par un octet nul et xargs a un -0 option qui indique xargs s'attendre à un octet nul en tant que séparateur. Utilisant ceux que vous obtenez: xxx


0 commentaires

1
votes

essayez d'utiliser la ligne tamponnée

grep -line-tamponnée

[modifier]

J'ai couru votre commande originale sur ma boîte et cela semble bien fonctionner, alors je ne suis plus sûr.


0 commentaires

0
votes

Si vous recherchez des arbres de code source, veuillez envisager d'utiliser ACK . Pour faire ce que vous faites dans ACK, peu importe d'espaces dans des noms de fichiers, vous feriez:

ack --php -i searchstring > output.txt


0 commentaires

0
votes

J'utilise toujours la commande suivante. Il affiche la sortie sur une console et crée également le fichier

grep -r "chaîne à rechercher". 2> & 1 | Tee /Your/path/to/file/filename.txt


0 commentaires

0
votes

Vérifiez l'espace disque libre par

$ df -Th


0 commentaires