تناوب
اولین مورد از ویژگی های عبارت منظم توسعه یافته که در مورد آن صحبت خواهیم کرد نامیده می شود متناوب، که امکانی است که اجازه می دهد تطبیق از میان مجموعه ای از عبارات رخ دهد. همانطور که یک عبارت براکت اجازه می دهد تا یک کاراکتر منفرد از مجموعه ای از کاراکترهای مشخص مطابقت داشته باشد، تناوب اجازه می دهد تا از مجموعه ای از رشته ها یا سایر عبارات منظم مطابقت داشته باشد.
برای نشان دادن، استفاده خواهیم کرد grep استفاده در رابطه با از دست. ابتدا، بیایید یک مسابقه رشته قدیمی ساده را امتحان کنیم:
[me@linuxbox ~]$ اکو "AAA" | grep AAA
AAA
[me@linuxbox ~]$ اکو "BBB" | grep AAA
[me@linuxbox ~]$
[me@linuxbox ~]$ اکو "AAA" | grep AAA
AAA
[me@linuxbox ~]$ اکو "BBB" | grep AAA
[me@linuxbox ~]$
یک مثال کاملاً ساده، که در آن خروجی را لوله می کنیم از دست به grep استفاده و نتایج را ببینید هنگامی که یک مسابقه رخ می دهد، ما آن را چاپ شده می بینیم. وقتی هیچ مسابقه ای رخ نمی دهد، ما هیچ نتیجه ای نمی بینیم.
اکنون تناوب را اضافه می کنیم که با متاکاراکتر نوار عمودی مشخص می شود:
[me@linuxbox ~]$ اکو "AAA" | grep -E 'AAA|BBB'
AAA
[me@linuxbox ~]$ اکو "BBB" | grep -E 'AAA|BBB'
BBB
[me@linuxbox ~]$ اکو "CCC" | grep -E 'AAA|BBB'
[me@linuxbox ~]$
[me@linuxbox ~]$ اکو "AAA" | grep -E 'AAA|BBB'
AAA
[me@linuxbox ~]$ اکو "BBB" | grep -E 'AAA|BBB'
BBB
[me@linuxbox ~]$ اکو "CCC" | grep -E 'AAA|BBB'
[me@linuxbox ~]$
در اینجا ما عبارت منظم را می بینیم "AAA|BBB"، که به معنی "تطابق یا مطابقت با رشته AAA یا رشته BBB" توجه داشته باشید که از آنجایی که این یک ویژگی توسعه یافته است، ما آن را اضافه کردیم -E گزینه ای برای grep استفاده (اگرچه ما فقط می توانستیم از آن استفاده کنیم egrep برنامه به جای آن)، و عبارت منظم را در نقل قول قرار دادیم تا پوسته از تفسیر متاکاراکتر نوار عمودی به عنوان عملگر لوله جلوگیری کند. جایگزینی به دو انتخاب محدود نمی شود:
[me@linuxbox ~]$ اکو "AAA" | grep -E 'AAA|BBB|CCC'
AAA
[me@linuxbox ~]$ اکو "AAA" | grep -E 'AAA|BBB|CCC'
AAA
برای ترکیب تناوب با سایر عناصر عبارت منظم، میتوانیم از () برای جداسازی تناوب استفاده کنیم:
[me@linuxbox ~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt
[me@linuxbox ~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt
این عبارت با نام فایلهای موجود در لیستهای ما مطابقت دارد که با «bz»، «gz» یا «zip» شروع میشوند. اگر پرانتز را کنار گذاشته بودیم، معنای این عبارت منظم:
[me@linuxbox ~]$ grep -Eh '^bz|gz|zip' dirlist*.txt
[me@linuxbox ~]$ grep -Eh '^bz|gz|zip' dirlist*.txt
تغییرات برای مطابقت با هر نام فایلی که با "bz" شروع می شود یا حاوی "gz" یا حاوی "زیپ".