جستجوی یک عبارت در محتویات فایلها با استفاده از دستور grep

در متن پیش رو، به شیوه های جستجو در محتویات فایلها با استفاده از دستور grep می پردازیم. برای انجام این جستجو، ابتدا باید با بعضی از سوییچهای دستور grep که مرتبط با این موضوع هستند، آشنا باشیم.

توجه! مثالها در محیط زیر اجرا خواهند شد:

[root@myhost ~]# mkdir –p /mydir/dir2

[root@myhost ~]# echo my name is vahid>/mydir/file1

[root@myhost ~]# echo my name is usef>>/mydir/file1

[root@myhost ~]# echo my name is usef>/mydir/dir2/file2

سوییچ r: با کمک سوییچ r، جستجو به صورت بازگشتی انجام می شود.

به عنوان مثال، با اجرای دستور زیر، عبارت “my name” علاوه بر آنکه در فایلهای موجود در دایرکتوری mydir/ جستجو می شود، در فایلهای موجود در زیر دایرکتوری mydir/dir2/ هم جستجو خواهد شد.

 [root@myhost ~]# grep -r ‘my name’ /mydir/

/mydir/dir2/file2:my name is usef

/mydir/file1:my name is vahid

/mydir/file1:my name is usef

برای جستجوی غیربازگشتی، می توان از سوییچ s به جای سوییچ r استفاده کرد:

[root@myhost ~]# grep -s ‘my name’ /mydir/*

/mydir/file1:my name is vahid

/mydir/file1:my name is usef

سوییچ n: عبارت جستجو شده در کدام خط از فایل وجود دارد(نمایش شماره خط)؟

 [root@myhost ~]# grep -rn ‘my name’ /mydir/

/mydir/dir2/file2:1:my name is usef

/mydir/file1:1:my name is vahid

/mydir/file1:2:my name is usef

سوییچ w: مطابقت کامل عبارت جستجو شده در محتویات فایل

[root@myhost ~]# grep -rnw ‘my nam’ /mydir/

[root@myhost ~]# grep -rnw ‘my name’ /mydir/

/mydir/dir2/file2:1:my name is usef

/mydir/file1:1:my name is vahid

/mydir/file1:2:my name is usef

سوییچ l: در خروجی مثالهای قبلی، محتوای فایل هم نمایش داده می شد، برای عدم نمایش این محتویات، می توان از سوییچ l استفاده کرد:

[root@myhost ~]# grep -rwl ‘my name’ /mydir/

/mydir/dir2/file2

/mydir/file1

پس از آشنایی با سوییچهای مورد نیاز، با چند مثال کاربردی در زمینه جستجو در محتویات فایلها آشنا خواهیم شد.

مثال 1: عبارت error را در محتویات تمامی فایلهایی که در زیر دایرکتوری var/log/ قرار دارند، جستجو کنید؟

[root@myhost ~]# grep -rwl ‘error’ /var/log

/var/log/gdm/:0.log.3

/var/log/gdm/:0.log.1

/var/log/gdm/:0-greeter.log.4

/var/log/gdm/:0.log

/var/log/gdm/:0-greeter.log.1

/var/log/gdm/:0.log.2

/var/log/gdm/:0.log.4

/var/log/anaconda.xlog

/var/log/prelink/prelink.log

/var/log/messages

/var/log/anaconda.syslog

/var/log/maillog-20190811

مثال 2: جستجو را در مثال قبلی صرفا در محتویات فایلهایی که پسوند log.* دارند انجام دهید.

برای این کار باید از سوییچ include استفاده کرد.

[root@myhost ~]# grep -rwl ‘error’ /var/log –-include=”*.log”

/var/log/gdm/:0.log

/var/log/prelink/prelink.log

مثال 3: به صورت همزمان، کلمات oracle و grid را در فایلهایی که در زیر دایرکتوری var/log/ قرار دارند، جستجو کنید. جستجو در فایلهایی که پسوند log.* دارند، انجام نشود.

با کمک سوییچ e، می توان چند عبارت را به طور همزمان جستجو نمود و استثنا کردن فایلهایی که پسوند log.* دارند، با کمک سوییچ exclude قابل انجام است:

[root@myhost ~]# grep –rwl –e ‘oracle’ –e ‘grid’ /var/log –exclude=”*.log”

/var/log/oracle-rdbms-server-11gR2-preinstall/backup/Aug-23-2017-23-53-13/sysctl.conf

/var/log/secure-20190811

/var/log/audit/audit.log.2

/var/log/audit/audit.log.4

/var/log/audit/audit.log.1

/var/log/audit/audit.log.3

/var/log/secure

مثال 4: عبارت error را در محتویات تمامی فایلهایی که در زیر دایرکتوری var/log/ قرار دارند به استثنا دایرکتوری gdm، جستجو کنید؟

با کمک سوییچ exclude-dir می توان دایرکتوری خاصی را درعملیات جستجو استثنا نمود.

[root@myhost ~]# grep -rwl ‘error’ /var/log –exclude-dir=”gdm”/var/log/anaconda.xlog

/var/log/prelink/prelink.log

/var/log/messages

/var/log/anaconda.syslog

/var/log/maillog-20190811

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.