لینوکس و من

پیدا کردن یک عبارت در یک سری فایل

گاهی پیش میاد که لازم داریم دنبال یه عبارت خاص توی پوشه ها و فایلهایی که داریم بگردیم. خب باز کردن دونه دونه اونها و یکی یکی سرچ کردن هم سخته هم خنگولانه است!
با این روش ها میشه این کار رو راحت تر کرد:

grep -rnw '/path/to/somewhere/' -e "pattern"
یک دستور تیپیک برای جست و جوی عبارت pattern در یک دایرکتوری.

grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"

این دستور جست و جو رو در فایلهایی انجام میده که پسوند اونها به c یا h ختم بشن

grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
این دستور هم میگه که همه فایلهایی که آخرشون به O ختم میشه از جست و جو خارج کن

یکم که با این دستورات بازی کنید نتیجه دلخواه خودتون رو میگیرید. برای توضیحات بیشتر به لینک منبع برید.

ویرایش:
یکی از خوانندگان عزیز وبلاگ، صدراله در مورد این سرچ کرد که چگونه یک عبارت را در تعداد زیادی فایل پیدا کنیم و اون را با یک عبارت دیگه جایگزین کنیم. یعنی همون find and replace در مقیاس بزرگ!
خودش زحمت کشید و جواب رو پیدا کرد و به اشتراک گذاشت. ممنون از تلاشش

 find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
دستور بالا در مسیر مشخص شده  cybernetnews را در فایلهایی که انتهای پسوند آنها c دارد پیدا و آن را به cybernet تبدیل میکند.

 find /home/user/directory -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
دستور بالا در مسیر مشخص شده عبارت cybernetnews را در همه ی فایلهای قابل خواندن، قابل ویرایش و اجرایی  پیدا و آن را به cybernet تبدیل میکند.
بدیهیه که با این دستورها خیلی کارهای بزرگتری میشه کرد. کافیه بلد باشیم و خلاقیت داشته باشیم.

دسته:

ترفند

کلیدواژه:

ترمینال

نظرات  (۴)

سلام با یه خط دستور در ۴۳۰۰ فایل htm کار رو انجام داد حتی سریع‌تر از regexxer
http://askubuntu.com/questions/84007/find-and-replace-text-within-multiple-files

دستور اول
پاسخ:
بسیااااار عالی. حتما وارد متن خواهد شد. دم شما گرم
سلام
یک سؤال و یک پیشهاد
اگر بخوام دنبال کارکتر ی در فایل‌های html بگردم و اون رو با ی جایگزین کنم برای قسمت دوم چه باید کرد؟
شما الان خیلی قشنگ بخش اول رو توضیح دادید لطفا بخش دوم رو هم بفرمایید



و اما من مطالب شما رو از طریق planet.sito.ir دنبال می‌کنم که فیدی که در اونجا قرار گرفته فیلتره
بعد گفتم همون وبلاگ لینوکس و من هست شک داشتم و جستجو کردم

تقریبا این اشتباه همیشه هست
پاسخ:
سلام. در مورد replace کردن کاراکتر فعلا نمیدونم. در موردش جست و جو میکنم. شما هم بکنید... در مورد فید هم یه فکری میکنیم. چشم.
grep ابزار قدرتمندی هست، اما رجکس قدرتمندتره! بدون regex، گرپ هیچی نیست. یاد گرفتن رجکس واجب ترینه!
واقعا ابزار قدرتمندی هست این grep هر چیزی ازش یاد میگیری بازم کمه

اول خط اشتباه تایپی داره یه نگاه بندازید.
پاسخ:
اوووو!مرسی. تصحیح شد