linux grep записывает вывод в файл - PullRequest
8 голосов
/ 21 декабря 2010
find . -name "*.php" | xargs grep -i -n "searchstring" >output.txt

Здесь я пытаюсь записать данные в файл, который не происходит ...

Ответы [ 8 ]

10 голосов
/ 21 декабря 2010

Как насчет добавления результатов с помощью >>?

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

У меня сейчас нет коробки с Linux, поэтому я попытаюсь импровизировать.

the xargs grep -i -n "searchstring" меня немного беспокоит.

Возможно, вы имели в виду xargs -I {} grep -i "searchstring" {}, или просто xargs grep -i "searchstring"?

Поскольку -n в качестве аргумента grep даст вам только цифры, я сомневаюсь, что эточто вам нужно.

Таким образом, ваш окончательный код будет

find . -name "*.php" | xargs grep -i "searchstring" >> output.txt
2 голосов
/ 21 декабря 2010
find . -name "*.php" -exec grep -i -n "function" {} \;  >output.txt

Но вы не будете знать, из какого файла он пришел.Возможно, вы захотите:

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

вместо.

1 голос
/ 22 декабря 2010

Попробуйте использовать линейный буфер

grep - line-buffered

[править]

Я выполнил твою оригинальную команду на своем ящике, и она, кажется, работает нормально, поэтому я больше не уверен.

1 голос
/ 21 декабря 2010

Я думаю, у вас есть пробелы в именах файлов php. Если вы передадите их от grep до xargs так, как вы это делаете, имена будут разбиты на части, а grep интерпретирует эти части как имена файлов, которые затем не сможет найти.

Для этого есть решение. У find есть опция -print0, которая указывает find разделять результаты байтом NUL, а xargs имеет опцию -0, которая указывает xargs ожидать байта NUL в качестве разделителя. Используя те, которые вы получаете:

find . -name "*.php" -print0 | xargs -0 grep -i -n "searchstring" > output.txt
0 голосов
/ 18 апреля 2017

Проверить свободное место на диске

$ df -Th

Возможно, на вашем диске недостаточно свободного места.

0 голосов
/ 10 декабря 2014

Я всегда использую следующую команду.Он выводит вывод на консоль, а также создает файл

grep -r "строка для поиска".2> & 1 |tee /your/path/to/file/filename.txt

0 голосов
/ 22 декабря 2010

Если вы ищете деревья исходного кода, рассмотрите возможность использования ack .Чтобы делать то, что вы делаете в ack, независимо от пробелов в именах файлов, вы должны сделать:

ack --php -i searchstring > output.txt
0 голосов
/ 21 декабря 2010

выглядит хорошо для меня. Что произойдет, если вы удалите >output.txt?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...