استخدام grep للبحث عن الملفات المقدمة بواسطة find:ما هو الخطأ في العثور على .| XARGS GREP "..."؟

StackOverflow https://stackoverflow.com/questions/1204781

سؤال

عندما أستخدم الأمر:

find . | xargs grep '...'

أحصل على المباريات الخاطئة.أحاول البحث عن السلسلة ... في كافة الملفات الموجودة في المجلد الحالي.

هل كانت مفيدة؟

المحلول

كما قال آندي وايت، عليك أن تستخدم fgrep من أجل المباراة عادي ., أو الهروب من النقاط.

لذلك عليك أن تكتب (-type f هو أن يكون لديك الملفات فقط:من الواضح أنك لا تريد الدلائل.):

find . -type f | xargs fgrep '...'

أو إذا كنت لا تزال ترغب في استخدام grep :

find . -type f | xargs grep '\.\.\.'

وإذا كنت تريد فقط حاضِر الدليل وليس أقسامه الفرعية:

find . -maxdepth 1 -type f | xargs fgrep '...'

نصائح أخرى

و'.' مباريات أي حرف، لذلك عليك أن تكون إيجاد جميع الخطوط التي تحتوي على 3 أحرف أو أكثر.

ويمكنك إما هربا من النقاط، مثل هذا:

find . | xargs grep '\.\.\.'

وأو يمكنك استخدام fgrep، والتي لا مباراة حرفية بدلا من مباراة التعبير العادي:

find . | xargs fgrep '...'

و(بعض إصدارات البقرى أيضا قبول العلم -F مما يجعلها تتصرف مثل fgrep).

وOP، إذا كنت تبحث عن الملفات التي تحتوي على ...

grep -R "\.\.\." *

إذا كنت تكتب حرفيا grep '...' سوف تطابق تماما عن أي سلسلة. أشك كنت تكتب في الواقع '...' للقيادة البقرى، ولكن إذا كنت، سوف ... تطابق اي ثلاثة أحرف.

يرجى نشر مزيد من المعلومات حول ما كنت تبحث عن، وربما شخص يمكن أن تساعدك على معرفة المزيد.

إذا كنت تبحث عن اسم الملف الذي يطابق، حاول:

find . -name "filename pattern" 

أو

find . | grep "filename pattern"

إذا كنت تبحث عن تبحث عن ملفات التي تطابق (أي أنها تحتوي على سلسلة grep)

find . | xargs grep "string pattern"

يعمل بشكل جيد.أو ببساطة:

grep "string pattern" -R *

لإكمال الإجابة جيريمي، قد ترغب أيضا في محاولة

find . -type f | xargs grep 'your_pattern'

أو

find . -type f -exec grep 'your_pattern' {} +

والذي يشبه إلى xargs

وأود أن أضيف: RTFM! أو بطريقة أكثر مهذبة: استخدام وإساءة استخدام

man command

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top