linux grep écrire la sortie dans un fichier
find . -name "*.php" | xargs grep -i -n "searchstring" >output.txt
Ici, je suis en train d'écrire des données dans un fichier qui n'est pas le cas...
Quelle est l'erreur que vous obtenez? Pourrait-il être vous n'avez pas la permission de créer output.txt?
Ce qui se produit lorsque vous exécutez la commande sans le '> output.txt'?
ce n'est pas vrai: l' > redirection est pour xargs, pas chaque grep il fonctionne, de sorte que tous grep écrire dans le même fichier de sortie.
vrai. A quoi je pensais... va supprimer le commentaire précédent afin de ne pas causer de la confusion.
Ce qui se produit lorsque vous exécutez la commande sans le '> output.txt'?
ce n'est pas vrai: l' > redirection est pour xargs, pas chaque grep il fonctionne, de sorte que tous grep écrire dans le même fichier de sortie.
vrai. A quoi je pensais... va supprimer le commentaire précédent afin de ne pas causer de la confusion.
OriginalL'auteur Rajesh | 2010-12-21
Vous devez vous connecter pour publier un commentaire.
Comment sur l'ajout des résultats à l'aide
>>
?Je n'ai pas la machine sous Linux avec moi en ce moment, donc je vais essayer de improvize.
la
xargs grep -i -n "searchstring"
me gêne un peu.Peut-être que vous avez voulu dire
xargs -I {} grep -i "searchstring" {}
, ou tout simplementxargs grep -i "searchstring"
?Depuis
-n
comme grep, l'argument du vous donnera seulement le nombre de lignes, je me doute que c'est ce que vous avez besoin.De cette façon, votre code final serait
alors votre première partie sons problématique. Vous devez écrire votre code de manière itérative, de sorte que vous pouvez voir ce qui se passe réellement. Dans ce cas, vous devriez avoir essayé
find . -name "*.php"
pour voir si vous obtenez des résultats. Qu'advient-il si vous essayezfind . -name "*php" -type f
?Vous pouvez utiliser
grep --include=*.php ...
de filtre, par extension, afin d'éviter lafind | xargs
la laideurOriginalL'auteur darioo
Mais vous ne savez pas quel fichier il est venu. Vous pourriez vouloir:
à la place.
A travaillé pour moi. 😉
OriginalL'auteur Keith
Je suppose que vous avez des espaces dans le php noms de fichiers. Si vous avez la main à
grep
parxargs
dans la façon dont vous le faites, les noms obtenez divisé en parties etgrep
interprète ces pièces comme des noms de fichiers qui ne se trouvent pas.Il y a une solution pour cela.
find
a un-print0
option qui demandefind
à des résultats séparés par un octet NUL etxargs
a un-0
option qui demandexargs
de s'attendre à un octet NUL comme séparateur. À l'aide de ceux que vous obtenez:OriginalL'auteur Peter van der Heijden
Essayez d'utiliser la ligne de tampon
grep --line-tampon
[modifier]
J'ai couru votre commande d'origine sur ma boîte et il semble bien fonctionner, donc je ne suis pas sûr.
OriginalL'auteur bear24rw
Semble bien pour moi. Qu'advient-il si vous supprimez
>output.txt
?OriginalL'auteur Mikel
Si vous êtes à la recherche d'arbres de code source, considérez l'utilisation de ack. Pour faire ce que vous faites dans l'accusé de réception, indépendamment de la présence d'espaces dans les noms de fichiers, vous feriez:
OriginalL'auteur Andy Lester
J'ai toujours utiliser 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
OriginalL'auteur Sam Kaz
Vérifier l'espace libre sur le disque par
C'est peut être pas assez d'espace libre sur votre disque.
OriginalL'auteur Alex