Найти в Linux в сочетании с поиском, чтобы вернуть определенную строку - PullRequest
0 голосов
/ 21 октября 2011

Я пытаюсь вернуть определенную строку из файлов, найденных в результате поиска:

find . -name "database.php"

Каждый из этих файлов содержит имя базы данных, рядом с переменной php, например $dname=

Я пытался использовать -exec для выполнения поиска grep по этому файлу, но безуспешно

 -exec "grep {\}\ dbname"

Может ли кто-нибудь дать мне некоторое представление о том, как выполнить эту задачу?* Я использую CentOS 5, и на моем сервере в подкаталогах хранится около 100 файлов database.php.

Спасибо

Джейсон

Ответы [ 4 ]

4 голосов
/ 21 октября 2011

У вас есть аргументы для grep в инвертированном виде, и вам нужны их как отдельные аргументы:

find . -name "database.php" -exec grep '$dbname' /dev/null {} +

Наличие /dev/null гарантирует, что имена файлов, которые соответствуют, также перечислены в спискекак совпадающие линии.

3 голосов
/ 21 октября 2011

Я думаю, что это сделает это.Не уверен, если вам нужно внести какие-либо корректировки для CentOS.

find . -name "database.php" -exec grep dbname {} \;
1 голос
/ 21 октября 2011

Я работал с помощью xargs

find . -name "database.php" -print | xargs grep \'database\'\=\> > list_of_databases

Не стесняйтесь опубликовать лучший способ, если вы найдете один (или какой представитель для хорошего ответа)

1 голос
/ 21 октября 2011

Я склонен избегать поиска, потому что я никогда не учился тому, как правильно его использовать, поэтому я бы выполнил вашу задачу:

grep dbname **/database.php

Edit: эта команда не будет жизнеспособной во всех случаях, потому что она может потенциально генерировать очень длинный список аргументов, тогда как find выполняет свою команду для найденных файлов один за другим, например, xargs. И, как я отметил в своем комментарии, это, возможно, не очень портативно. Но это чертовски мало;)

...