تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

استفاده از Grep و عبارات معمولی برای جستجوی الگوهای متن در لینوکس


۱۴ اسفند ۱۴۰۳

مقدمه

دستورgrep یکی از مفیدترین دستورات در ترمینال لینوکس است. دستور grep مخفف global regular expression print است. با این دستور می‌توانید بررسی کنید آیا ورودی دریافت شده با الگوی مشخص شده مطابقت دارد یا خیر. این دستور به ظاهر ساده بسیار قدرتمند است، طوری‌که  توانایی مرتب‌سازی ورودی بر اساس قوانین پیچیده ، آن را به یک پیوند محبوب در بسیاری از زنجیره‌های خط فرمان تبدیل می‌کند.

در این آموزش از لیارا، شما گزینه‌های دستور grep را بررسی کرده سپس برای جستجوی پیشرفته‌تر از عبارات معمولی استفاده می‌کنید.

پیش‌نیازها

  • برای این آموزش به یک سیستم عامل لینوکس نیاز دارید. برای اینکار می‌توانید از سرور مجازی اوبونتو که با SSH یا هر وسیله‌ای به آن متصل شده‌اید، استفاده کنید.
  • آشنایی با خط فرمان لینوکس. اگر نیاز به یک مرور کلی یا آموزش اولیه در این زمینه دارید، می‌توانید از راهنمای خط فرمان لینوکس استفاده کنید.
  • یک سرور مجازی با سیستم‌عامل اوبونتو همراه با یک کاربر غیر روت (non-root) که دسترسی sudo دارد و همچنین شامل یک فایروال فعال است. برای راه‌اندازی اولیه سرور و پیکربندی این موارد، راهنمای نحوه راه‌اندازی اولیه سرور مجازی با اوبونتو را دنبال کنید.

کاربرد اولیه

در این آموزش، شما از grep برای جستجوی مجوز عمومی GNU نسخه 3 برای کلمات و عبارات مختلف استفاده می‌کنید.

اگر از سیستم اوبونتو استفاده می‌کنید ، می‌توانید فایل را در پوشه /usr/share/common-licenses پیدا کنید. آن را در فهرست اصلی خود کپی کنید:

cp /usr/share/common-licenses/GPL-3 .

اگر در سیستم دیگری هستید، از دستور curl برای دانلود فایل استفاده کنید:

curl -o GPL-3 https://www.gnu.org/licenses/gpl-3.0.txt

همچنین در این آموزش از فایل مجوز BSD استفاده خواهید کرد. در لینوکس، می‌توانید آن را با دستور زیر در فهرست اصلی خود کپی کنید:

cp /usr/share/common-licenses/BSD .

اگر از سیستم دیگری استفاده می‌کنید، فایل را با دستور زیر ایجاد کنید:

cat << 'EOF' > BSD
Copyright (c) The Regents of the University of California.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
EOF

حالا که فایل ها را دارید، می‌توانید کار با grep را شروع کنید.

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

اکنون، دستور زیر را اجرا کنید تا با استفاده از grep هر خطی که شامل GNUباشد را جستجو کنید:

grep "GNU" GPL-3

آرگومان اول، GNU، الگویی است که به دنبال آن می‌گردید، در حالی که آرگومان دوم،GPL-3، فایل ورودی است که می‌خواهید در آن جستجو کنید.

حالا خروجی شما، خطوطی خواهد بود که شامل متن الگو (کلمه GNU) باشد:

                    GNU GENERAL PUBLIC LICENSE
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
  Developers that use the GNU GPL protect your rights with two steps:
  "This License" refers to version 3 of the GNU General Public License.
  13. Use with the GNU Affero General Public License.
under version 3 of the GNU Affero General Public License into a single

در برخی از سیستم‌ها، الگویی که جستجو کرده‌اید در خروجی هایلایت خواهد شد.

گزینه‌های رایج

در این بخش به برخی از گزینه‌های متداول دستور grep اشاره می‌کنیم که می‌توانند برای جستجوی دقیق‌تر و کارآمدتر مفید باشند:

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

اگر می‌خواهید که grep به حساسیت به حروف (case sensitivity) توجه نکند و هم نسخه‌های بزرگ و هم کوچک حروف را جستجو کند، می‌توانید از گزینه -i یا --ignore-case استفاده کنید.

برای جستجوی هر نمونه از کلمه license (با حروف بزرگ، کوچک یا ترکیبی از آن‌ها) در همان فایل قبلی از دستور زیر استفاده کنید:

grep -i "license" GPL-3

نتایج شامل موارد زیر خواهد بود:

  • LICENSE
  • license
  • License
Output
                    GNU GENERAL PUBLIC LICENSE
 of this license document, but changing it is not allowed.
  The GNU General Public License is a free, copyleft license for
  The licenses for most software and other practical works are designed
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
(1) assert copyright on the software, and (2) offer you this License
  "This License" refers to version 3 of the GNU General Public License.
  "The Program" refers to any copyrightable work licensed under this

اگر نمونه‌ای با LiCeNsE وجود داشت، آن نیز برگردانده میشد.

اگر بخواهید تمام خطوطی که شامل یک الگوی خاص نیستند را پیدا کنید، می‌توانید از گزینه -v یا --invert-match استفاده کنید.

برای جستجوی هر خطی که شامل کلمه the نباشد در فایل مجوز BSD که در ابتدای آموزش گفتیم، از دستور زیر استفاده کنید:

grep -v "the" BSD

پس از اجرای دستور، خروجی زیر را مشاهده خواهید کرد:

All rights reserved.

Redistribution and use in source and binary forms, with or without
are met:
    may be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

از آن‌جایی که گزینه عدم حساسیت به حروف (ignore case) را مشخص نکردید، دو مورد آخر به عنوان خطوطی که کلمه the را ندارند، بازگشتند.

معمولاً لازم است که بدانید تطبیق‌ها در کدام شماره خط اتفاق می‌افتند. برای این کار می‌توانید از گزینه -n یا --line-number استفاده کنید. دستور قبلی را با افزودن این پرچم به صورت زیر دوباره اجرا کنید:

grep -vn "the" BSD

خروجی:

2:All rights reserved.
3:
4:Redistribution and use in source and binary forms, with or without
6:are met:
13:   may be used to endorse or promote products derived from this software
14:   without specific prior written permission.
15:
16:THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17:ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...

حالا می‌توانید از شماره خط‌ها برای اعمال تغییرات در هر خطی که شامل کلمه the نیست استفاده کنید. این ویژگی به‌ویژه زمانی که با کد منبع کار می‌کنید بسیار مفید است، زیرا به شما کمک می‌کند سریع‌تر به مکان‌های مورد نظر در فایل دسترسی پیدا کرده و تغییرات لازم را اعمال کنید.

عبارات منظم

در مقدمه گفتیم که grep مخفف عبارت global regular expression print است. یک عبارت منظم یک رشته متنی است که الگوی خاصی برای جستجو را توصیف می‌کند.

برنامه‌ها و زبان‌های برنامه‌نویسی مختلف، عبارات منظم را کمی به روش‌های مختلف پیاده‌سازی می‌کنند. در این آموزش، شما فقط با یک بخش کوچک از روش‌هایی که grep برای توصیف الگوهای خود استفاده می‌کند آشنا خواهید شد.

تطبیق‌های دقیق

در مثال‌های قبلی این آموزش، زمانی که کلمات GNU و the را جستجو کردید، در واقع به دنبال عبارات منظم پایه‌ای می‌گشتید که دقیقاً رشته کاراکترهای GNU و the را تطبیق می‌دهند. الگوهایی که دقیقاً کاراکترهای مورد نظر را مشخص می‌کنند، literal نامیده می‌شوند، زیرا آن‌ها الگو را به‌طور دقیق، کاراکتر به کاراکتر، تطبیق می‌دهند.

مفید است که این‌ها را به‌عنوان تطبیق یک رشته از کاراکترها در نظر بگیرید، نه به‌عنوان تطبیق یک کلمه. این تفاوت زمانی مهم‌تر می‌شود که با الگوهای پیچیده‌تر آشنا شوید.

تمام کاراکترهای الفبایی و عددی (همچنین برخی دیگر از کاراکترها) به‌طور دقیق تطبیق می‌دهند، مگر اینکه توسط دیگر مکانیزم‌های عبارت منظم تغییر پیدا کنند.

تطبیق‌های لنگر

ابتدا باید بگوییم که لنگرها کاراکترهای ویژه‌ای هستند که مشخص می‌کنند یک تطبیق باید در کجای خط رخ دهد تا معتبر باشد.

برای مثال، با استفاده از لنگرها می‌توانید مشخص کنید که فقط می‌خواهید خطوطی که کلمه GNU در ابتدای آن‌ها ظاهر می‌شود را پیدا کنید. برای این کار، می‌توانید از لنگر ^ قبل از رشته مورد نظر استفاده کنید.

دستور زیر را اجرا کنید تا در فایل GPL-3 جستجو کنید و خطوطی که کلمه GNU در ابتدای آن‌ها ظاهر می‌شود را پیدا کنید:

grep "^GNU" GPL-3

خروجی دستور بالا دو خط زیر خواهد بود:

GNU General Public License for most of our software; it applies also to
GNU General Public License, you may choose any version ever published

به‌طور مشابه، از لنگر $ در انتهای یک الگو استفاده می‌کنید تا نشان دهید تطبیق فقط زمانی معتبر است که در انتهای خط اتفاق بیفتد.

این دستور هر خطی که با کلمه and در فایل GPL-3 تمام شود را تطبیق خواهد داد:

grep "and$" GPL-3

حالا خروجی دریافتی به این شکل خواهد بود:

that there is no warranty for this free software.  For both users' and
  The precise terms and conditions for copying, distribution and
  License.  Each licensee is addressed as "you".  "Licensees" and
receive it, in any medium, provided that you conspicuously and
    alternative is allowed only occasionally and noncommercially, and
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
provisionally, unless and until the copyright holder explicitly and
receives a license from the original licensors, to run, modify and
make, use, sell, offer for sale, import and otherwise run, modify and

تطبیق هر نوع کاراکتری

در عبارات منظم، برای تطبیق هر کاراکتری (به جز خط جدید)، می‌توانید از نقطه (.) استفاده کنید. این کاراکتر به معنای هر کاراکتر است و به شما اجازه می‌دهد که با هر چیزی که در آن موقعیت قرار دارد، مطابقت کنید.

برای مثال، برای تطبیق هر چیزی در فایل GPL-3 که شامل دو کاراکتر و سپس رشته cept باشد، از الگوی زیر باید استفاده کنید:

grep "..cept" GPL-3

خروجی:

use, which is precisely where it is most unacceptable.  Therefore, we
infringement under applicable copyright law, except executing it on a
tells the user that there is no warranty for the work (except to the
License by making exceptions from one or more of its conditions.
form of a separately written license, or stated as exceptions;
  You may not propagate or modify a covered work except as expressly
  9. Acceptance Not Required for Having Copies.

همان‌طور که می‌بینید، این خروجی شامل نمونه‌هایی از کلمات accept و except و همچنین تغییرات مختلف این دو کلمه است. حتی اگر z2cept نیز پیدا می‌شد، الگو، آن را هم تطبیق می‌داد.

عبارات داخل پرانتز

با قرار دادن یک گروه از کاراکترها داخل پرانتز ([ ])، می‌توانید مشخص کنید که کاراکتر در آن موقعیت می‌تواند هر یک از کاراکترهای موجود در گروه پرانتز باشد.

برای مثال، برای پیدا کردن خطوطی که شامل کلمات too یا two هستند، می‌توانید این دو شکل را به‌طور مختصر با استفاده از الگوی زیر مشخص کنید:

grep "t[wo]o" GPL-3

همان‌طور که در خروجی مشاهده می‌کنید هر دو حالت too و two در فایل وجود دارند.

our programs, too.
freedoms that you received.  You must make sure that they, too, receive
Developers that use the GNU GPL protect your rights with two steps:
a computer network, with no transfer of a copy, is not conveying.
System Libraries, or general-purpose tools or generally available free
 Corresponding Source from a network server at no charge.

استفاده از نماد پرانتز گزینه‌های جالبی به شما می‌دهد. شما می‌توانید با شروع لیست کاراکترها در داخل پرانتز با علامت ^، الگو را طوری تنظیم کنید که با هر چیزی به جز کاراکترهای داخل پرانتز مطابقت داشته باشد.

این مثال مشابه الگوی .ode است، اما با code تطبیق نخواهد داشت:

grep "[^c]ode" GPL-3

خروجی:

  1. Source Code.
    model, to give anyone who possesses the object code either (1) a
the only significant mode of use of the product.
notice like this when it starts in an interactive mode:

توجه کنید که در خط دوم برگشتی، در واقع کلمه code وجود دارد. این اشتباه در عبارت منظم یا grep نیست. بلکه این خط برگشت داده شده چون در بخش قبلی خط، الگوی mode که در کلمه model یافت شده بود، پیدا شد. خط برگشت داده شد چون نمونه‌ای از الگو در آن وجود داشت.

ویژگی مفید دیگری که پرانتزها دارند این است که می‌توانید یک بازه از کاراکترها را مشخص کنید به جای اینکه هر کاراکتر موجود را به‌طور جداگانه وارد کنید.

برای مثال، اگر بخواهید هر خطی که با یک حرف بزرگ شروع می‌شود را پیدا کنید، می‌توانید از الگوی زیر استفاده کنید:

grep "^[A-Z]" GPL-3
GNU General Public License for most of our software; it applies also to
States should not allow patents to restrict development and use of
License.  Each licensee is addressed as "you".  "Licensees" and
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
System Libraries, or general-purpose tools or generally available free
Source.
User Product is transferred to the recipient in perpetuity or for a

به‌علت برخی مشکلات قدیمی در مرتب‌سازی، معمولاً استفاده از کلاس‌های کاراکتری POSIX به جای بازه‌های کاراکتری که قبلاً استفاده کردید، دقت بیشتری دارد.

در اینجا، موضوع درباره تمام کلاس‌های کاراکتری POSIX است که از حوضله این راهنما خارج است، اما برای انجام همان کاری که در مثال قبلی انجام دادیم، می‌توانیم از کلاس کاراکتری \[:upper:\] در داخل پرانتز استفاده کنیم:

grep "^[[:upper:]]" GPL-3

در نهایت، خروجی این دستور مانند خروجی قبلی خواهد بود.

تکرار الگو به تعداد دلخواه (از صفر تا بی‌نهایت)

بالاخره به یکی از پراستفاده‌ترین متا‌کاراکترها که ستاره (*) است، رسیدیم. به این معنی که: کاراکتر یا الگوی قبلی را صفر یا چند بار تکرار کن.

برای مثال، اگر بخواهید تمام خطوطی را در فایل GPL-3 پیدا کنید که شامل یک پرانتز باز ( و یک پرانتز بسته ) باشند، و بین آن‌ها فقط حروف و فاصله‌های تکی وجود داشته باشد، می‌توانید از الگوی زیر استفاده کنید:

grep "([A-Za-z ]*)" GPL-3

خروجی را مشاهد کنید:

Copyright (C) 2007 Free Software Foundation, Inc.
distribution (with or without modification), making available to the
than the work as a whole, that (a) is included in the normal form of
Component, and (b) serves only to enable use of the work with that
(if any) on which the executable work runs, or a compiler used to
    (including a physical distribution medium), accompanied by the
    (including a physical distribution medium), accompanied by a
    place (gratis or for a charge), and offer equivalent access to the

تا اینجا از نقطه (.)، ستاره (*) و سایر کاراکترها در الگوهای جستجو استفاده کردید، اما گاهی اوقات لازم است همین کاراکترها را به‌صورت دقیق جستجو کنید، نه به‌عنوان بخشی از یک الگوی خاص.

اسکیپ از کاراکترهای متا

گاهی اوقات لازم است که یک نقطه (.) یا کروشه باز ([) را به‌طور دقیق جستجو کنید، به‌ویژه زمانی که با کدهای منبع یا فایل‌های پیکربندی کار می‌کنید. چون این کاراکترها در عبارات منظم معنای خاصی دارند، باید آن‌ها را اسکیپ کنید تا grep بفهمد که نباید این کاراکترها را به‌عنوان علامت ویژه تفسیر کند.

برای این کار، کافی است قبل از این کاراکترها یک بک‌اسلش (\) قرار دهید تا به‌طور دقیق همان کاراکتر جستجو شود:

grep "^[A-Z].*\.$" GPL-3

خروجی به شکل زیر خواهد بود:

Source.
License by making exceptions from one or more of its conditions.
License would be to refrain entirely from conveying the Program.
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
SUCH DAMAGES.
Also add information on how to contact you by electronic and paper mail.

حالا بیایید به سایر گزینه‌های عبارات منظم نگاهی بیاندازیم.

عبارات منظم گسترش‌یافته

دستور grep با استفاده از فلگ -E یا با فراخوانی دستور egrep به جای grep از زبان عبارات منظم گسترش‌یافته پشتیبانی می‌کند.

این گزینه‌ها قابلیت‌های عبارات منظم گسترش‌یافته را فعال می‌کنند. عبارات منظم گسترش‌یافته شامل تمام متا‌کاراکترهای پایه به همراه متا‌کاراکترهای اضافی هستند که امکان بیان تطابق‌های پیچیده‌تر را فراهم می‌کنند.

گروه‌بندی

یکی از پرکاربردترین قابلیت‌هایی که عبارات منظم گسترش‌یافته ارائه می‌دهند، توانایی گروه‌بندی عبارات است تا بتوانید آن‌ها را به‌طور همزمان به‌عنوان یک واحد، جستجو کنید یا تغییر دهید.

برای گروه‌بندی عبارات، کافی است آن‌ها را داخل پرانتز قرار دهید. اگر بخواهید از پرانتز استفاده کنید ولی از عبارات منظم گسترش‌یافته استفاده نکنید، می‌توانید با قرار دادن یک بک‌اسلش (\) قبل از پرانتز، از آن به‌طور عادی استفاده کنید. به این ترتیب، سه عبارت زیر از نظر عملکرد مشابه هم هستند:

grep "\(grouping\)" file.txt
grep -E "(grouping)" file.txt
egrep "(grouping)" file.txt

انتخاب

به طور مشابه با نحوه استفاده از کروشه‌ها برای مشخص کردن گزینه‌های مختلف برای تطبیق یک کاراکتر، در انتخاب (Alternation) می‌توانید برای تطبیق رشته‌ها یا مجموعه‌ای از عبارات، گزینه‌های مختلفی را مشخص کنید.

برای نشان دادن انتخاب، از علامت | استفاده می‌شود. این علامت معمولاً در داخل پرانتزها به کار می‌رود تا مشخص کند که یکی از چند گزینه باید تطبیق داده شود.

برای مثال، عبارت زیر هرکدام از GPL یا General Public License را در متن پیدا می‌کند:

grep -E "(GPL|General Public License)" GPL-3

دستور فوق، خروجی مشابه زیر را، خواهد داشت:

 The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
  Developers that use the GNU GPL protect your rights with two steps:
  For the developers' and authors' protection, the GPL clearly explains
authors' sake, the GPL requires that modified versions be marked as
have designed this version of the GPL to prohibit the practice for those
...
...

مقداردهنده‌ها

مثل کاراکتر * که قبلاً به کاراکتر یا مجموعه‌ای از کاراکترها صفر یا بیشتر بار تطبیق می‌دهد، در عبارات منظم گسترش‌یافته (extended regular expressions) کاراکترهای دیگری نیز وجود دارند که تعداد دفعات وقوع را مشخص می‌کنند.

برای اینکه یک کاراکتر، فقط صفر یا یکبار داخل متن باشد، می‌توانید از علامت ? استفاده کنید. این عمل باعث می‌شود کاراکتر یا مجموعه کاراکترهایی که قبلا آمده‌اند، اختیاری باشد.

عبارت زیر به‌دنبال copyright و right می‌گردد، که در آن copy به صورت اختیاری گروه‌بندی شده است:

grep -E "(copy)?right" GPL-3

خروجی:

Copyright (C) 2007 Free Software Foundation, Inc.
  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
know their rights.
  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
  "Copyright" also means copyright-like laws that apply to other kinds of
...

حالا در کد زیر، کاراکتر + یک الگو را یک یا چندبار تطبیق می‌دهد. کاری که کاراکتر * انجام می‌دهد، اما با کاراکتر + الگو باید حداقل یک‌بار با خواسته‌ شما تطبیق پیدا کند.

عبارت زیر، رشته free را پیدا کرده و به دنبال یک یا چند کاراکتر که فضای خالی نیستند، می‌گردد:

grep -E "free[^[:space:]]+" GPL-3

خروجی:

The GNU General Public License is a free, copyleft license for
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
  When we speak of free software, we are referring to freedom, not
have the freedom to distribute copies of free software (and charge for
you modify it: responsibilities to respect the freedom of others.
freedomss that you received.  You must make sure that they, too, receive
protecting users' freedom to change the software.  The systematic
of the GPL, as needed to protect the freedom of users.
patents cannot be used to render the program non-free.

مشخص کردن تکرار تطبیق

برای مشخص کردن تعداد دفعاتی که یک تطبیق تکرار می‌شود، از کاراکترهای آکولاد ({ and }) استفاده کنید. این کاراکترها به شما این امکان را می‌دهند که یک عدد دقیق، یک بازه یا حد بالا و پایین برای تعداد دفعات تطبیق یک عبارت مشخص کنید.

شما می‌توانید، برای پیدا کردن تمام خطوط در فایل GPL-3 که شامل سه صدای هم‌جنس هستند، از عبارت زیر استفاده کنید:

grep -E "[AEIOUaeiou]{3}" GPL-3

هر سطر برگشتی دارای یک کلمه با سه مصوت است:

Output
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
receive it, in any medium, provided that you conspicuously and
give under the previous paragraph, plus a right to possession of the
covered work so as to satisfy simultaneously your obligations under this

برای مطابقت با کلماتی که بین 16 تا 20 طول کاراکتر دارند، از عبارت زیر استفاده کنید:

grep -E "[[:alpha:]]{16,20}" GPL-3

اکنون، خروجی دستور بالا را مشاهده کنید:

 certain responsibilities if you distribute copies of the software, or if
    you modify it: responsibilities to respect the freedom of others.
        c) Prohibiting misrepresentation of the origin of that material, or

در آخر، فقط خطوطی که شامل کلماتی با این طول هستند نمایش داده می‌شوند.

جمع بندی

در این آموزش از لیارا دیدید که دستورات grep برای پیدا کردن الگوها در داخل فایل‌ها یا ساختار دایرکتوری سیستم فایل بسیار مفید است، بنابراین ارزش دارد که وقت بگذارید و با گزینه‌ها و دستور زبان آن راحت شوید. عبارات منظم حتی انعطاف‌پذیرتر هستند و می‌توانند با بسیاری از برنامه‌های محبوب استفاده شوند. به عنوان مثال، بسیاری از ویرایشگرهای متنی از عبارات منظم برای جستجو و جایگزینی متن استفاده می‌کنند.

همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راه‌اندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی به‌صرفه

سوالات متداول

1- عبارات منظم چیست و چرا مهم هستند؟
عبارات منظم یک الگوی متنی هستند که به شما امکان می‌دهند تا درون داده‌ها یا فایل‌ها جستجو کرده و آن‌ها را پردازش کنید. این ابزار در جستجو و ویرایش متن کاربرد زیادی دارد.

2- چطور از دستور grep برای جستجو در فایل‌ها استفاده کنم؟
دستور grep برای پیدا کردن الگوهای خاص در داخل فایل‌ها و دایرکتوری‌ها استفاده می‌شود. با استفاده از این دستور می‌توانید خطوطی که شامل یک الگو هستند را استخراج کنید.

3- چه تفاوتی بین grep و egrep وجود دارد؟
grep برای جستجو با استفاده از عبارات منظم پایه‌ای (Basic Regular Expressions) طراحی شده، در حالی که egrep برای استفاده از عبارات منظم گسترش‌یافته (Extended Regular Expressions) است که قابلیت‌های بیشتری دارند.

4- چطور می‌توانم جستجوی خود را با استفاده از گزینه‌های grep دقیق‌تر کنم؟
می‌توانید از گزینه‌هایی مانند -i برای جستجو بدون توجه به حروف بزرگ و کوچک، -v برای نمایش خطوطی که با الگو مطابقت ندارند، و -n برای نمایش شماره خطوط استفاده کنید.

5- چگونه از عبارات منظم برای جستجوی چندین گزینه به طور همزمان استفاده کنیم؟
با استفاده از عملگر alternation، می‌توانید چندین الگو را با هم ترکیب کرده و جستجو کنید.

6- چه کاربردهایی برای عبارات منظم در برنامه‌نویسی وجود دارد؟
بیشتر زبان‌های برنامه‌نویسی از عبارات منظم برای جستجو، پردازش رشته‌ها، اعتبارسنجی ورودی‌ها و انجام عملیات پیچیده بر روی داده‌ها استفاده می‌کنند.

7- چطور می‌توانم از پرانتزها در عبارات منظم برای گروه‌بندی استفاده کنم؟
با استفاده از پرانتزها، می‌توانید عبارات منظم را گروه‌بندی کرده و آن‌ها را به صورت واحدی به کار ببرید. این قابلیت به شما امکان می‌دهد تا الگوهای پیچیده‌تری بسازید.

8- آیا می‌توان از عبارات منظم در ویرایشگرهای متن استفاده کرد؟
بله، بسیاری از ویرایشگرهای متن مانند Vim و Sublime Text از عبارات منظم برای جستجو و جایگزینی متن پشتیبانی می‌کنند.