در متن پیش رو، به شیوه های جستجو در محتویات فایلها با استفاده از دستور 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