Как может я grep результаты использования НАХОДКИ - ДОЛЖНОСТНОЕ ЛИЦО и все еще производить в файл?

Randal Schwartz раньше часто отправлял "Бесполезное использование (x)" в списках. Одно такое сообщение было о kill -9. Это включает причины и рецепт для следования. Вот восстановленная версия (заключена в кавычки ниже).

(Отвращение кавычки)

Нет нет нет. Не используйте уничтожают-9.

Это не дает процессу шанс чисто:

1) закройте сокетные соединения

2) очистите временные файлы

3) сообщите его детям, что это уходит

4) сбросьте его терминальные характеристики

и так далее и так далее и так далее.

Обычно отправьте 15 и ожидайте секунда или два, и если это не работает, отправьте 2, и если это не работает, отправьте 1. Если это не делает, УДАЛЯЕТ ДВОИЧНЫЙ ФАЙЛ, потому что программа плохо себя ведется!

Не используйте уничтожают-9. Не производите комбайн только для уборки цветочного горшка.

Просто другое Бесполезное Использование Usenet,

(.signature)

69
06.11.2011, 03:45
6 ответов

Если я понимаю Вас правильно, это - то, что Вы хотите сделать:

find . -name '*.py' -print0 | xargs -0 grep 'something' > output.txt

Find все файлы с расширением py, grep только строки, которые содержат something и сохраните строки в output.txt. Если файл содержит что-нибудь, что он будет заменен.

Править: Использование - должностное лицо:

find . -name '*.py' -exec grep 'something' {} \; > output.txt

Я включаю комментарий Chris Downs здесь. Вышеупомянутая команда приведет к grep будучи выполняемым так же много раз как find находит происшествия. Однако, если Вы заменяете ; с a +, grep назван с выводом от find связанный (до определенного предела). Посмотрите вопрос Использовать точку с запятой (;) по сравнению с плюс (+) с должностным лицом в находке для больше на предмете.

110
27.01.2020, 19:31
  • 1
    Использовать + вместо \;, это значительно улучшит время выполнения (так как это будет contatenate аргументы до выполнения до ARG_MAX). –  Chris Down 06.11.2011, 16:31
  • 2
    Теперь я понимаю питание xargs!Спасибо! –  domih 06.04.2016, 11:45
  • 3
    Использоватьgrep -H если Вы хотите включать имя файла файла в выводе. –  Steinar 23.04.2018, 16:18

Если Вы хотите сохранить все согласующие отрезки длинной линии через все файлы в output.txt, Ваша последняя команда действительно работает, за исключением того, что Вы пропускаете необходимое ; в конце команды.

find . -name "*.py" -type f -exec grep "something" {} \; > output.txt

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

find . -name "*.py" -type f -exec sh -c 'grep "something" <"$0" >"$0.txt"' {} \;
18
27.01.2020, 19:31
  • 1
    последний действительно хороший :D –  bakytn 20.09.2011, 06:32
  • 2
    Чтобы подробно остановиться на ответе @gilles для создания, это немного более информативный, особенно если список файлов Вы имеете дело с, является большим, можно сообщить об имени файла (относительный путь) каждого файла наряду с результатами grep'ed с помощью этого: find . -name "*.py" -type f -exec grep "something" {} \; -print > output.txt И если требуется видеть номера строки grep'ed строк, можно, конечно, использовать grep -n "something" –  JJMpls 24.07.2014, 05:27

Использовать tee:

find . -name '*.py' | tee output.txt | xargs grep 'something'

Протест, то, если у Вас есть какие-либо файлы со специальными символами (включая пробелы) это xargs и grep не будет работать хорошо с (a file.txt будет интерпретироваться как два файла, a и file.txt). Альтернатива этому должна использовать любого -x или -print0, но любой из тех загрязнит Ваш output.txt. -x будет использовать \ для выхода из определенных специальных символов и это будет в output.txt. -print0 будет использовать пустой байт в качестве разделителя полей (который также требует xargs -0) и output.txt будет похож на одну длинную непрерывную строку текста.

Как Вы имеете дело (или делаете не) с Вам решать.

2
27.01.2020, 19:31

Для справки, grep имеет аргументы --include и --exclude, которые можно использовать для фильтрации искомых файлов:

grep -r --include="*.py" "something" > output.txt
9
27.01.2020, 19:31
grep -n CThread '`find. -name "*.cpp"`'
1
27.01.2020, 19:31

Чтобы найти файлы в каталоге и найти строку в результате :find $dir -name "*partoffilename*" | xargs -I '{}' grep -ri $searchstring {}

0
12.11.2021, 20:29

Теги

Похожие вопросы